问题:似乎我没有正确理解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() {
...
}
问题:
Troop
表不包含troop_fk
字段(请参见上面的示例)使用inverse =“true”映射关联的一端不会影响 级联的操作,因为这些是正交的概念。
答案 0 :(得分:2)
以下是我对这个概念的一般理解。我不知道
如果这相当于Hibernate
或JPA
的使用率100%。
当你有聚合时,你有一个实体(比如Car
),它有一个其他类型的实体集合(比如说Seat
)。或者你有一个Student
,它有一组Course
个实体(他已注册的课程)。
现在这个集合可能拥有或不拥有。
当它拥有时,意味着它只属于这个父母,父母拥有它。这是一个建模概念。例如,如果删除父项,那么子实体不应再存在,它们只是在拥有实体之外没有意义。所以他们也应该被删除。不确定此Car
和Seat
是否是拥有集合的最佳示例,因为理论上这些Seat
实体可能会移动到另一个Car
实例(例如在维修商店中) )。
另一方面,您可能拥有一个非拥有的集合。假设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;你现在没有双边关系)。
业主方是否暗示对订单的某些限制 诱惑应该得救?
没有