问题描述
我正尝试如下创建实体
@Data
public class Person
{
@Id
private String id;
@OneToMany(mappedBy="id")
private List<person> friends;
}
离开JPA创建实体,我就可以将与朋友保持联系的人保留为空
Letting JPA create entity and i am able to persist person with friends as null
当尝试使用填充的朋友列表保存新朋友时,该关系在RDBMS中不可见,并且在保存时不会引发任何错误.
when trying to save a new person with friends list populated , the relation is not visible in RDBMS and its not throwing any error while saving.
无法确定是否实际存储了朋友数据?如果是,如何访问它?
Not able to figure out is the friend data actually getting stored ? If yes , how to access it ?
推荐答案
假定您有两个表Person
和Person_Friends
. Person
类的外观如下:
Assuming you have two tables, Person
and Person_Friends
. The Person
class looks as below:
注意:为简单起见,我将IDENTITY
用作GenerationType
,将int
用作id
的数据类型.
NOTE: To keep it simple, I have used IDENTITY
as GenerationType
and int
as datatype for id
.
@Entity
class Person
{
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int id;
@OneToMany(cascade=CascadeType.ALL)
@JoinTable(name="Person_Friends")
List<Person> friends = new ArrayList<>();
@Override
public String toString() {
return "Person [id=" + id + ", friends=" + friends + "]";
}
}
使用friends
保存示例Person
对象的代码:
The code to save a sample Person
object with friends
:
entityManager.getTransaction().begin();
Person p = new Person();
p.friends.add(new Person());
p.friends.add(new Person());
p.friends.add(new Person());
p.friends.add(new Person());
entityManager.persist(p);
entityManager.getTransaction().commit();
使用此架构,您应该能够在Person_Friends
表中找到朋友数据.
With this schema you should be able to find friends data in Person_Friends
table.
加载Person
对象(要查看其朋友数据)也应填充friends
列表,尽管对于此映射而言比较懒惰.
Loading the Person
object for whom you want to view the friends data should populate the friends
list as well although lazily for this mapping.
如果要查看此处使用的自动生成的表,请使用以下DDL:
In case you want to see the auto-generated tables used here, the DDLs below:
create table Person (
id integer generated by default as identity,
primary key (id)
)
create table Person_Friends (
Person_id integer not null,
friends_id integer not null
)
alter table Person_Friends
add constraint UK_4ehyhs34ebu5gl6k8u5ckd2u7 unique (friends_id)
alter table Person_Friends
add constraint FKjvrny03ut8h70garyw5ehnlr7
foreign key (friends_id)
references Person
alter table Person_Friends
add constraint FK85ngln3801hk33fkhhsl7b8e7
foreign key (Person_id)
references Person
这篇关于在同一实体上的JPA onetomany的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!