繁体   English   中英

使用joinColumn进行单向一对多映射

[英]Unidirectional one to many mapping with joinColumn

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

说如果有一个可以拥有许多电话号码的员工,那么拥有这个映射

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

@Entity
public class Phone { 
...
}

Hibernate将使用外键生成电话表,因此我在这里看不到任何问题。 另外,我也不想让电话类拥有employee属性。 Hibernate小组建议在这种情况下使用联接表,但是为什么我应该不必要地创建一个表呢?

与其说是性能问题,不如说是设计问题。 如果您认为某个电话不知道其分配给的雇员,则意味着该电话实体独立于该雇员实体。 并且,如果它独立于Employee实体,则其表不应具有Employee表的外键。

此外,由于电话不了解其员工,这意味着它可能会被重用并与其他类型的实体(公司,客户等)相关联。对于所有可以在电话表本身中有一个电话。

如果是单向映射,休眠将命中数据库两次,

对于同一个员工John的新电话,它将执行以下操作

在电话号码表中插入新电话号码

在phn no表中使用此phn no更新员工id(john)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM