class Person {
@Id
@Column(name = "id")
String id;
@OneToOne
@JoinColumn(name = "id", referencedColumnName = "person_id")
Name name;
}
class Name {
@Id
@Column(name = "person_id")
String personId;
String name;
}
class Parent {
@Id
@Column(name = "id")
String id;
@OneToMany
@JoinColumn(name = "parent_id", referencedColumnName = "id")
List<Child> childs;
// fields...
}
class Child {
@Id
@Column(name = "Id")
String id;
@Column(name = "parent_id)
String parentId;
}
在@JoinColumn中的一对多关系中,我从子表中设置name,从父表中设置reference column。但是,当我在上面的person类中用@OneToOne定义相同的单向关系时,我必须从person表而不是从name表中设置@JoinColumn名称。
我的问题是为什么这两个连接条件中的定义名称不同,在一个条件中,我必须将该名称设置为来自同一表的PK列名的名称,而在第二个示例中,我必须设置来自子表的列的名称。
原因是联接列只能出现在toone
端。正如文档中所述:
公共抽象java.lang.String名称
(可选)外键列的名称。在其中找到它的表取决于上下文。
请注意,只在JPA 2.0中添加了使用单向@OneTomany
和@JoinColumn
的功能
@OneToMany
@JoinColumn(name = "parent_id")
List<Child> childs;
当您使用单向@OneTomany
而不使用@JoinColumn
时:
@OneToMany
List<Child> childs;
例如,hibernate在两个连接实体之间使用链接表。
问题内容: 如何在EJB 3.0实体Bean(JPA)中建立单向关系? 例如,客户了解Order,但是Order没有任何针对客户的方法。使用(@OneToMany或@OneToOne或@ManyToMany) 问候 问题答案: 使用JPA 2.0 建立单向关系的方法如下: 关系型数据库: 顾客: 订购:
我在一个实体上有一个简单的单向ManyToOne关系,不幸的是,这个关系是在一个我无法更改的模式中定义的。
我的父母子女单向关系如下: 我创建一个父实例,给它分配一个子列表,并尝试持久化它,它工作得很好。 当我试图通过子实体单独保存时,我看到insert查询试图将null插入子表中的列PARENT_ID,并导致 异常,同时保存独立于父表的子实体。我试图插入的子实体与已经存在的父实体相关。 在将关系定义为单向关系后,是否无法直接保存子实体?
我正在为我的项目使用Spring Data JPA(以hibernate作为提供程序),并想知道何时需要实体之间的双向映射? 在我的用例中,我有一个实体,与实体具有关系。目前,我在实体中没有相应的关系。从我所能理解的查看其他帖子,除非我需要通过我的实体/Hibernate删除,否则我可能不需要这样做。我想知道通过双向关系我还能得到什么? 这是我的,不包括访问者: 这是,不包括访问器: 如果我一直在
我的实体更新有问题。如你所见,我有三个实体。 包含类中的列表。 包含类中的列表。 从我的SQL语句中可以看到,字段和是唯一的。我的表中只允许该组合的一行。 当我用类的新列表更新父实体()时,我希望Hibernate删除旧列表本身并创建新实体。一个一个地更新孩子是有点困难的。这就是为什么我要直接删除所有相关的孩子。 当我更新并为其提供包含具有唯一名称的和(数据库中已存在的实体)组合的列表时,我会出现
环境:Spring 4.0.3,spring-data-jpa 1.2.0,Hibernate 4.2.10,jackson 2.3.3,lombok 1.12.6, 科目实体(已编辑) 用户实体(已编辑) 事务管理器(编辑)