假设您有两个表,Person 和 Person_Friends。 Person 类如下所示:
注意:为了简单起见,我使用IDENTITY 作为GenerationType 和int 作为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 对象的代码:
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 表中找到朋友数据。
如果是,如何访问?
加载您要查看其好友数据的Person 对象也应填充friends 列表,尽管对于此映射是延迟的。
如果您想查看此处使用的自动生成表,请查看以下 DDL:
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