拥有方真的意味着什么?

时间:2014-04-09 12:05:43

标签: java hibernate jpa hibernate-mapping

问题:似乎我没有正确理解Hibernate * -to-many映射的逻辑,或者说是精确拥有的一面。

示例(一方拥有一方的一对多)

@Entity
public class Troop {
    @OneToMany
    @JoinColumn(name="troop_fk") //we need to duplicate the physical information
    public Set<Soldier> getSoldiers() {
    ...
}

@Entity
public class Soldier {
    @ManyToOne
    @JoinColumn(name="troop_fk", insertable=false, updatable=false)
    public Troop getTroop() {
    ...
}

问题:

  1. 为什么我要复制物理信息?为什么Troop表不包含troop_fk字段(请参见上面的示例)
  2. Hibernate是否会忽略映射(非所有者)方面的所有查询?
  3. 所有者方是否意味着对节目的保存顺序有一些限制?
  4. 下一句是什么意思?
  5.   

    使用inverse =“true”映射关联的一端不会影响   级联的操作,因为这些是正交的概念。

2 个答案:

答案 0 :(得分:2)

以下是我对这个概念的一般理解。我不知道 如果这相当于HibernateJPA的使用率100%。

当你有聚合时,你有一个实体(比如Car),它有一个其他类型的实体集合(比如说Seat)。或者你有一个Student,它有一组Course个实体(他已注册的课程)。

现在这个集合可能拥有或不拥有。

  1. 当它拥有时,意味着它只属于这个父母,父母拥有它。这是一个建模概念。例如,如果删除父项,那么子实体不应再存在,它们只是在拥有实体之外没有意义。所以他们也应该被删除。不确定此CarSeat是否是拥有集合的最佳示例,因为理论上这些Seat实体可能会移动到另一个Car实例(例如在维修商店中) )。

  2. 另一方面,您可能拥有一个非拥有的集合。假设Student有一个已注册的Course集合。现在,Student并不拥有此集合,因为显然Student离开了大学(所以我们删除他),这并不意味着他的Course不再存在。我意识到这是一个很多的例子。我现在想不出一个不属于非收藏品的好例子。

答案 1 :(得分:1)

  

为什么我要复制物理信息?为什么部队表   不包含troop_fk字段(请看上面的示例)

在两个实体之间,您可以拥有多个关系,例如:组织有多个员工,组织由多个员工领导。只有双边关系,你才能谈论拥有和非拥有方。假设两个关系都是双边的,这意味着每个实体都有两个字段。现在还不清楚Hibernate将这些字段映射到两个关系。这就是为什么引入这个概念,将字段配对/分配给相同的关系。

示例:

public class Organisation {
    @OneToMany(mappedBy="employeeOf")
    private List<Employee> employees;
    @OneToMany(mappedBy="leaderOf")
    private List<Employee> leaders;
}

public class Employee {
    @ManyToOne
    @JoinColumn("organisationAsEmployee_id")
    private Organisation employeeOf;
    @ManyToOne
    @JoinColumn("organisationAsLeader_id")
    private Organisation leaderOf;
}

假设在Organisation.employees中你没有mappedBy。然后Hibernate不知道该字段是否与Employee.employeeOf或Employee.leaderOf处于相同的关系或单个独立关系(Employee实体中没有匹配的字段)。 如果它不知道那条信息,它不知道如何加入表格,或者是否必须创建一个新字段。

  

Hibernate是否会忽略映射(非所有者)端的所有查询?

Hibernate(JPA)会忽略NOT-owner方面的@JoinColumn,但不会忽略级联注释。并且一个NOT-owner方面必须在ManyToOne注释中有一个mappedBy属性(你没有=&gt;你现在没有双边关系)。

  

业主方是否暗示对订单的某些限制   诱惑应该得救?

没有