【问题标题】:Unidirectional one to many mapping with joinColumn使用 joinColumn 的单向一对多映射
【发布时间】:2012-09-12 08:51:20
【问题描述】:

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

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

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

@Entity
public class Phone { 
...
}

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

【问题讨论】:

    标签: hibernate nhibernate-mapping


    【解决方案1】:

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

    此外,由于电话不了解其员工,这意味着它可能会被重复使用并与其他类型的实体相关联:公司、客户等。拥有所有电话的外键是有问题的可以在电话表本身中有电话的实体。

    【讨论】:

      【解决方案2】:

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

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-08
        • 1970-01-01
        • 1970-01-01
        • 2011-04-24
        • 2016-01-23
        • 2014-11-15
        相关资源
        最近更新 更多