Hibernate 带joinColumn的单向一对多映射

Hibernate 带joinColumn的单向一对多映射,hibernate,nhibernate-mapping,Hibernate,Nhibernate Mapping,根据hibernate文档,hibernate团队强烈建议不要在没有联接表的情况下使用一对多单向映射。我想知道这是因为性能问题还是其他原因 比如说,如果有一个员工可以有很多电话号码,那么我将有这个映射 @Entity public class Employee { ... @OneToMany @JoinColumn(name="employee_fk") public List<Phone> phones; ... } @Entity public class Pho

根据hibernate文档,hibernate团队强烈建议不要在没有联接表的情况下使用一对多单向映射。我想知道这是因为性能问题还是其他原因

比如说,如果有一个员工可以有很多电话号码,那么我将有这个映射

@Entity
public class Employee { 
...
 @OneToMany
 @JoinColumn(name="employee_fk")
 public List<Phone> phones;
 ...
 }

@Entity
public class Phone { 
...
}
Hibernate将生成带有外键的电话表,所以我在这里看不到任何问题。另外,我不想让phone类拥有employee属性。
Hibernate团队建议在这种情况下使用联接表,但我为什么要不必要地创建一个表呢?

与其说是性能问题,不如说是设计问题。如果你认为电话不知道它被指派给的雇员,这意味着电话实体与雇员实体无关。如果它独立于Employee实体,那么它的表不应该有Employee表的外键


此外,由于手机不知道其员工的情况,这意味着它可能会被重用,并与其他类型的实体(公司、客户等)关联。在电话表中可以有手机的所有实体都有外键是值得怀疑的

与其说是性能问题,不如说是设计问题。如果你认为电话不知道它被指派给的雇员,这意味着电话实体与雇员实体无关。如果它独立于Employee实体,那么它的表不应该有Employee表的外键


此外,由于手机不知道其员工的情况,这意味着它可能会被重用,并与其他类型的实体(公司、客户等)关联。在电话表中可以有手机的所有实体都有外键是值得怀疑的

在单向映射的情况下,hibernate将命中DB两次

对于同一个员工John的新电话号码,它会做类似的事情

在phn no表中插入新的电话号码

在phn no表中使用此phn no更新员工idjohn


此外,您还需要映射您的phone持久性类并向特定员工注册,否则您的phone类将被重用,我猜您不想这样做。

在单向映射的情况下,hibernate将命中DB两次

对于同一个员工John的新电话号码,它会做类似的事情

在phn no表中插入新的电话号码

在phn no表中使用此phn no更新员工idjohn

此外,您还需要映射您的phone持久性类并向特定员工注册,否则您的phone类将被重用,我想您不想这样做