2

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

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

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

@Entity
public class Phone { 
...
}

Hibernate 将使用外键生成电话表,所以我在这里看不到任何问题。另外,我不想让电话课程拥有员工财产。Hibernate 团队建议在这种情况下使用连接表,但我为什么要不必要地创建一个表?

4

2 回答 2

2

这更像是一个设计问题而不是性能问题。如果您认为 Phone 不知道分配给它的员工,这意味着 Phone 实体独立于 Employee 实体。如果它独立于 Employee 实体,它的表不应该有 Employee 表的外键。

此外,由于电话不知道它的员工,这意味着它可能被重用并与其他类型的实体相关联:公司、客户等。拥有所有实体的外键是有问题的在电话桌本身有一部电话。

于 2012-09-12T09:28:28.837 回答
2

在单向映射的情况下,休眠将两次命中数据库,

对于同一员工约翰的新手机,它会做这样的事情

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

用 phn no 表中的这个 phn no 更新员工 id(john)

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

于 2012-09-12T10:04:08.603 回答