java-拥有方的真正含义是什么?
作者:互联网
问题:似乎我对Hibernate *到许多映射的逻辑理解不正确,或者确切地说是拥有所有权.
示例(一对一,拥有一方)
@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_fk字段(请参见上面的示例)
> Hibernate是否忽略映射(而非所有者)端的所有查询?
>所有者一方是否暗示对保存实体的顺序有一些限制?
>下一个短语是什么意思?
Mapping one end of an association with inverse=”true” does not affect
the operation of cascades as these are orthogonal concepts.
解决方法:
Why I should duplicate the physical information? And why Troop table
doesn’t contains troop_fk field (look at example above)
在两个实体之间,您可以具有多个关系,例如:组织有多个员工,组织由多个员工领导.只有在双边关系中,您才能谈论拥有和不拥有的一面.假设两个关系都是双边的,这意味着每个实体每个都有两个字段.现在对于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中您没有被映射.然后,Hibernate将不知道此字段与Employee.employeeOf或Employee.leaderOf处于相同关系还是单个独立关系(在Employee实体中没有匹配字段).而且,如果它不知道那条信息,它也不知道如何联接表,或者是否必须创建一个新字段.
Does Hibernate ignore all the queries on mapped (not owner) side?
Hibernate(JPA)忽略NOT所有者端的@JoinColumn,但不忽略级联注释.并且非所有者方必须在ManyToOne批注中具有mappingBy属性(您现在没有=>您现在没有双边关系).
Does owner side implies some restrictions on the order in which
entites should be saved?
没有.
标签:jpa,hibernate,hibernate-mapping,java 来源: https://codeday.me/bug/20191121/2055125.html