一对一映射的概念。 解释映射
如何定义2个类之间One-to-One
关系? 从概念上讲,我认为我在某个地方出错了。 我不知道是什么,但确实如此。
我们假设有两个名为Country
和PM
类:
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_pm
或String 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-one
或many-to-many
关系。
这就是映射通常看起来像这样的原因
country
但是一对一的映射确实非常特殊。 我想在PM端(在DB中使用国家/地区ID引用)进行多次映射可能更合适。 根本就是不同的方法,但……
请尝试看看这篇好文章:
- 一对一示例(XML映射)
- 5.1.13。 一比一
- 使用hibernate命名参数两次
- 注入自动连接的依赖项失败; 嵌套exception是org.springframework.beans.factory.BeanCreationException:
- 为什么Hibernate默认设置动态insert = false
- EclipseLinkJpaVendorAdapter而不是HibernateJpaVendorAdapter问题
- 在分层Spring MVC Web应用程序中处理Hibernate Sessions的最佳方法
- Wicket:如何处理长时间运行的任务
- 自JPA 2.1以来如何命名ManyToOne引用的外键约束?
- 使用Spring进行Hibernate二级缓存
- BCrypt.checkpw()无效的盐版本exception