冬眠中的一对一关系



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

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将保存冲突的记录,而不会像您已经发现的那样抱怨。休眠不可能使用从另一侧的对象开始的关系(在您的情况下通过移动设备获取员工(。如果将移动设备配置为急切地获取其相关员工,则在两个员工都保存后,将无法将手机放入内存中。

最新更新