根据hibernate文档,hibernatenate团队强烈建议在没有连接表的情况下不使用一对多的单向映射。我想知道这是因为性能问题还是其他任何原因。
假设有一个员工可以拥有多个电话号码,那么我将拥有这个映射
@Entity
public class Employee {
...
@OneToMany
@JoinColumn(name="employee_fk")
public List<Phone> phones;
...
}
@Entity
public class Phone {
...
}
Hibernate将生成带有外键的电话表,所以我在这里看不到任何问题。此外,我不希望电话类具有员工财产。 Hibernate团队建议在这种情况下使用连接表,但为什么我不必要地创建一个表?
答案 0 :(得分:2)
这更像是设计问题,而不是性能问题。如果您认为电话不了解其所分配的员工,则表示电话实体与员工实体无关。如果它与Employee实体无关,则其表不应具有Employee表的外键。
此外,由于电话不了解其员工,这意味着它可能会被重复使用并与其他类型的实体相关联:公司,客户等。拥有所有的外键是有问题的。可以在电话表中拥有电话的实体。
答案 1 :(得分:2)
在单向映射的情况下,hibernate将击中DB两次,
对于同一名员工John的新手机,它会做这样的事情
在phn no table
中插入新手机号码使用此phn no table
中的phn no更新员工ID(john)您还需要映射手机持久性等级并向特定员工注册,否则您的手机课程将被重复使用,我想您不想这样做。