我试图理解javax.persistence注释@onetoone、@manytoone和@manytomany。这些注释的描述提到了非所有者端
。具体来说:
[@OneToOne]:如果关系是双向的,则非拥有方必须使用OneToOne注释的mappedBy元素来指定拥有方的关系字段或属性。
[@manytoone]:如果关系是双向的,那么非所有者OneToMany实体端必须使用mappedBy元素来指定作为关系所有者的实体的关系字段或属性。
注:从这里拍摄的图像。
那么哪些是这些关联的非拥有实体方呢?
在两个对象之间的双向关系中,您必须选择管理关系的哪一方。从数据库的角度来看,管理关系意味着管理链接两个表之间的某个FK列的值。管理它的一方称为拥有方。否则,称为非拥有方。
回到您在ProjectManager
和Project
上的示例。哪个对象是拥有方取决于您选择哪个对象来管理它们的关系。
如果选择projectmanager
作为拥有方(因此project
为非拥有方),则将只使用projectmanager#getprojects()
的值来确定此类FK列的值。(在本例中是project
表的project_manager_id
列)project#getprojectmanager()
的值将被忽略,并且不会影响该FK列的值。
@Entity
@Table(name="project_manager")
public class ProjectManager{
@OneToMany
private List<Project> projects = new ArrayList<>();
}
@Entity
@Table(name="project")
public class Project {
@ManyToOne
@JoinColumn(name = "project_manager_id")
private ProjectManager projectManager;
}
另一方面,如果您选择project
到所属端(因此projectmanager
是非所属端),则只有project#getprojectmanager()
的值将用于确定此FK列的值,而projectmanager#getprojects()
的值将被忽略。案例中的JPA映射如下:
@Entity
@Table(name="project_manager")
public class ProjectManager{
@OneToMany(mappedBy="projectManager")
private List<Project> projects = new ArrayList<>();
}
@Entity
@Table(name="project")
public class Project {
@ManyToOne
@JoinColumn(name = "project_manager_id")
private ProjectManager projectManager;
}
附言:我使用属性访问来解释它,希望您能理解。
问题内容: 我看不到“多对一”关系与“一对一”关系的架构有什么区别: 与 有什么区别吗? 问题答案: 它们在架构上看起来完全相同,但是在Hibernate Layer上有所不同。 如果尝试这样的操作: 一切都会好起来的。但是,保存后,如果您尝试获取订单: 当然,在两种情况下,您的Address类应该看起来有所不同。
在JPA中,实体的字段是否可能同时具有@ManyTomany和@ManyToOne注释? 这是我的桌子: 这是我的实体(简化的ofc): 我会尽力解释: > @ManyToOne:Entity2和Entity3都有一个引用Entity1的字段。所以有一个多对一的关系。 所以有了这个,我想我必须使用@ManyTomany。但我发现了一些错误。 所以我想知道:这有可能把@ManyTomany和@Man
我有这些实体: 用户 角色 权限 一个用户有很多角色,一个角色有很多权限。 null
我有两个实体,用户和电影。他们是很多双向的关系。我的问题是,当我通过我的控制器删除一部电影时,它也会删除所有与该电影相关的实体。My user和this user角色和movie实体。我要做什么,从表中删除电影实体,并保持用户与他的角色,而不是删除他们所有。
如果是使用Spring数据/JPA的拥有方,用双向关系表示下表的最佳方式是什么?我希望能够使用保存,并保存。 节点表 身份证 node_node表 > 节点标识2 这是我到目前为止所拥有的。以为拥有方的双向关系,这意味着当我在
我在读下面的文章: 然而,student实体是用mappedBy注释的,我知道任何用mappedBy注释的实体都是相反的一面。谁能解释一下这个吗? 2-哪个ID是外键?@PrimaryKeyJoinColumn在Address实体中使用,这意味着地址Id是主键和外键吗?在下面的文章中,它们有相同的示例,但它是单向的: http://websystique.com/hibernate/hiberna