Java 拥有一方到底意味着什么?

Java 拥有一方到底意味着什么?,java,hibernate,jpa,hibernate-mapping,Java,Hibernate,Jpa,Hibernate Mapping,问题:我似乎没有正确理解Hibernate*的逻辑——对许多映射,或者确切地说是对所有方的映射 示例(一对多,其中一方为拥有方) @实体 公营部队{ @独身癖 @JoinColumn(name=“team_fk”)//我们需要复制物理信息 公共集{ ... } @实体 公营士兵{ @许多酮 @JoinColumn(name=“team_fk”,insertable=false,updateable=false) 公共团队getTroop(){ ... } 问题: 为什么我应该复制物理信息?为什

问题:我似乎没有正确理解Hibernate*的逻辑——对许多映射,或者确切地说是对所有方的映射

示例(一对多,其中一方为拥有方)

@实体
公营部队{
@独身癖
@JoinColumn(name=“team_fk”)//我们需要复制物理信息
公共集{
...
}
@实体
公营士兵{
@许多酮
@JoinColumn(name=“team_fk”,insertable=false,updateable=false)
公共团队getTroop(){
...
}
问题:

  • 为什么我应该复制物理信息?为什么
    team
    表不包含
    team\u fk
    字段(参见上面的示例)
  • Hibernate是否忽略映射(而不是所有者)端的所有查询
  • 业主方是否暗示对实体保存顺序有一些限制
  • 下一个短语是什么意思
  • 使用reverse=“true”映射关联的一端不会影响 级联操作,因为它们是正交概念


    下面是我对这个概念的一般理解。我不知道
    如果这100%对应于
    Hibernate
    JPA
    的使用

    当你有聚合时,你有一个实体(比如说
    Car
    ),它有另一种类型的实体集合(比如说
    Seat
    )。或者你有一个
    学生
    ,它有一个
    课程
    实体集合(他注册的课程)

    现在,此集合可能拥有或不拥有

  • 当它被拥有时,它意味着它只属于这个父实体,父实体拥有它。这是一个建模概念。例如,如果你删除父实体,那么子实体就不应该再存在了,它们只是在拥有的实体之外没有意义。所以它们也应该被删除。不确定这个
    Car
    Seat
    是否正确自有收藏的最佳示例,因为这些
    座椅
    实体理论上可能会移动到另一个
    汽车
    实例(例如在维修店)

  • 另一方面,你可能有一个不属于你的收藏。比如说一个
    学生
    有一个它注册的
    课程
    的收藏。现在,
    学生
    没有这个收藏,因为显然如果
    学生
    离开了大学(所以我们删除了他),这并不意味着他的
    课程
    不复存在。我意识到这是一个多对多的例子。我现在想不出一个好的一对多的例子来描述一个不属于自己的收藏

  • 为什么要复制物理信息?为什么要复制数据表 不包含force_fk字段(参见上面的示例)

    在两个实体之间,你可以有多种关系,比如:组织有多个员工,组织由多个员工领导。只有当一种关系是双边关系时,你才能谈论拥有方和非拥有方。假设这两种关系都是双边关系,意味着每个实体都有两个字段。现在应该是unclear for 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;
    }
    
    公共类组织{
    @OneToMany(mappedBy=“employeeOf”)
    私人名单雇员;
    @OneToMany(mappedBy=“leaderOf”)
    私人名单领导人;
    }
    公营雇员{
    @许多酮
    @JoinColumn(“组织员工id”)
    私营机构雇员;
    @许多酮
    @JoinColumn(“组织领导id”)
    私营机构负责人;
    }
    
    假设在
    Organization.employees
    中,您没有
    mappedBy
    。那么Hibernate将不知道此字段是否与Employee.employeeOf或Employee.leaderOf处于同一关系中,或者是单个独立关系(在员工实体中没有匹配字段)。如果它不知道这段信息,它就不知道如何连接表,或者是否必须创建新字段

    Hibernate是否忽略映射(而不是所有者)端的所有查询

    Hibernate(JPA)忽略非所有者端的@JoinColumn,但不忽略级联注释。非所有者端必须在manyTone注释中具有
    mappedBy
    属性(您没有=>您现在没有双边关系)

    业主方是否暗示了对订单的一些限制 是否应保存实体


    不。

    这是JPA,不是专门针对Hibernate的。这将使谷歌搜索信息产生更多的结果。如果这是一对多映射,我希望@OneToMany端定义一个mappedBy属性,而不是联接列。@Gimby有很多情况。我从Hibernate文档中取这个例子。@VolodymyrBakhmatiuk我不知道他们的答案.你能为第一点提供一个例子吗?关于第二点:这是否意味着非业主方没有级联?在我的回答中回答了你的两个问题。
    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;
    }