编程语言
首页 > 编程语言> > java-拥有方的真正含义是什么?

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