gpt4 book ai didi

java - hibernate 中的一对一关系

转载 作者:太空宇宙 更新时间:2023-11-04 11:18:51 25 4
gpt4 key购买 nike

我正在 hibernate 中实现一对一(一名员工<->一名移动设备)关系,如下所示。这段代码工作正常,但由于这是一对一的关系,为 emp1 和 emp2 分配相同的手机号码应该会产生问题(它违反了关系),但代码正在接受并添加 2 个具有相同手机的 emp(从数据库表中确认)。为什么 Hibernate 是一对一的关系,就像一台手机<->许多员工?我的代码:@实体

public class Employee {
@Id @GeneratedValue(strategy=GenerationType.AUTO)
private int id;
private String name;
@OneToOne
private Mobile mobile;
//...rest of the code
}
@Entity
public class Mobile {
@Id @GeneratedValue
private int id;
private long number;
//...rest of the code
}
Test Client main(...){
Mobile mobile = new Mobile(9999999999L);
Employee emp1 = new Employee("Raja");
Employee emp2 = new Employee("Raja");
emp1.setMobile(mobile);
emp2.setMobile(mobile);// VIOLATING 1-1 RELATIONSHIP
//...REST OF THE COMMON CODE
session.save(mobile);
session.save(emp1);
session.save(emp2);
session.getTransaction().commit();
}

数据库显示两条 EMP 记录具有相同的手机号码(违反 1-1)

最佳答案

对于一对一的关系,您应该始终确保对数据库有唯一的约束(由 hibernate 生成或手动创建)。

Hibernate 不会检查它,因为每次检查都需要收集额外的数据。数据库可以更有效地做到这一点。为了进行检查,hibernate 必须执行额外的查询。如果数据库配置正确,额外的查询将花费时间和资源,而没有任何好处。

如果您没有唯一约束并且定义了双向关系,则可能会遇到更多麻烦。正如您已经发现的那样,Hibernate 将保存冲突的记录而不会提示。并且 hibernate 状态将不可能使用从另一侧的对象开始的关系(在您的情况下通过移动设备获取员工)。如果将移动设备配置为急切地获取其相关员工,则在保存两个员工的位置后,将无法将移动设备获取到内存中。

关于java - hibernate 中的一对一关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45160898/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com