一对一映射的概念。 解释映射

如何定义2个类之间One-to-One关系? 从概念上讲,我认为我在某个地方出错了。 我不知道是什么,但确实如此。

我们假设有两个名为CountryPM类:

 Country int c_id String name_c PM int c_id String name_pm 

现在一个国家,只有一个PM,PM只能属于一个国家。 我如何在我的映射文件中执行此操作?

我在尝试这个:

              

但是这个有效映射除了在运行时产生exception之外name_pm也没做。它说在Country类中找不到属性name_pm ! 但它是否在Country类中搜索。 它应该在PM类内搜索。

还帮助我完成两个类之间的one-to-one映射。 我已经尝试了一段时间了。

Java代码:

国家

  public class Country { private int c_id; private String name_c; public int getC_id() { return c_id; } public void setC_id(int c_id) { this.c_id = c_id; } public String getName_c() { return name_c; } public void setName_c(String name_c) { this.name_c = name_c; } } 

下午

  public class PM { private int c_id; private String name_pm; public int getC_id() { return c_id; } public void setC_id(int c_id) { this.c_id = c_id; } public String getName_pm() { return name_pm; } public void setName_pm(String name_pm) { this.name_pm = name_pm; } } 

问题出在xml映射和Java代码之间的关系中。

如果你指定

   

在你的Country POJO中需要有一个名为“name_pm”的字段。

你没有这样的领域。

如果您的Country类具有相应PM对象的字段,则应在此处使用该字段的名称。

如果两个类都没有引用另一个类,则需要添加一个。

我可能会对您的代码执行的操作是向国家/地区添加字段并在映射中使用其名称。

 public class Country { private int c_id; private String name_c; private PM c_pm; public int getC_id() { return c_id; } public void setC_id(int c_id) { this.c_id = c_id; } public String getName_c() { return name_c; } public void setName_c(String name_c) { this.name_c = name_c; } public PM getC_pm() { return c_pm; } public void setC_pm(PM c_PM) { this.c_pm = c_pm; } } 

制图:

        

免责声明:

我没有测试任何这个,我不确定应该如何使用共享主键完成映射。 如果有人想要提供经过测试的版本,我会高兴地推荐另一个答案,或者让这个回答“社区维基”。

如果你的部分问题也是“……我认为我在某个地方出错,从概念上来说……”,我想提供一些解释。

首先, One-to-One意味着引用是在对象(实例)之间。 换句话说,必须从一个对象到另一个对象的引用。 不仅是一个常见的简单类型(即String name_pmString name_c

两个对象应该互相引用:

 public class PM { private Country country; // reference to an instance of the PM ... } public class Country { private PM pm; // reference to an instance of the Country ... } 

数据库级别上,它更棘手。 因为引用基于ID列,我们向我们保证,这两个Country-PM将始终属于一起,我们必须重用ID值。

因此,一个对象将扮演Master的角色,例如Country,第二个将根据它分配其ID。 如果我们不遵循这种模式,我们就不能确定,迟早会出现一些many-to-onemany-to-many关系。

这就是映射通常看起来像这样的原因

            country     

但是一对一的映射确实非常特殊。 我想在PM端(在DB中使用国家/地区ID引用)进行多次映射可能更合适。 根本就是不同的方法,但……

请尝试看看这篇好文章:

  • 一对一示例(XML映射)
  • 5.1.13。 一比一