Java 拥有一方到底意味着什么?
问题:我似乎没有正确理解Hibernate*的逻辑——对许多映射,或者确切地说是对所有方的映射 示例(一对多,其中一方为拥有方)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(){ ... } 问题: 为什么我应该复制物理信息?为什
@实体
公营部队{
@独身癖
@JoinColumn(name=“team_fk”)//我们需要复制物理信息
公共集{
...
}
@实体
公营士兵{
@许多酮
@JoinColumn(name=“team_fk”,insertable=false,updateable=false)
公共团队getTroop(){
...
}
问题:
team
表不包含team\u fk
字段(参见上面的示例)下面是我对这个概念的一般理解。我不知道
如果这100%对应于
Hibernate
或JPA
的使用
当你有聚合时,你有一个实体(比如说Car
),它有另一种类型的实体集合(比如说Seat
)。或者你有一个学生
,它有一个课程
实体集合(他注册的课程)
现在,此集合可能拥有或不拥有
Car
和Seat
是否正确自有收藏的最佳示例,因为这些座椅
实体理论上可能会移动到另一个汽车
实例(例如在维修店)学生
有一个它注册的课程
的收藏。现在,学生
没有这个收藏,因为显然如果学生
离开了大学(所以我们删除了他),这并不意味着他的课程
不复存在。我意识到这是一个多对多的例子。我现在想不出一个好的一对多的例子来描述一个不属于自己的收藏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;
}