Sal*_*gzi 11 hibernate hibernate-mapping hibernate-annotations
在两个表之间有多对多关系的映射表之间,我怎样才能为第二个实体加载id.
以下是解释我想在这里实现的内容的示例.以下是示例模式
create table user(
id int PrimaryKey,
name text
)
create table pages (
id int PrimaryKey,
page_name text
)
create table user_page (
id_user int,
id_page int,
PrimaryKey (id_user, id_page)
)
Run Code Online (Sandbox Code Playgroud)
注意:用户和页面表中还有其他列,为简洁起见,我未在此处包含这些列.
用户实体:
@Entity
@Table(name = "user")
public class User {
@id
@column(name="id")
private Integer id;
@column(name="name")
private String name;
...
...
}
@Entity
@Table(name = "page")
public class Page {
@id
@column(name="id")
private Integer id;
@column(name="page_name")
private String name;
...
...
}
Run Code Online (Sandbox Code Playgroud)
我想要做的是Set<Integer> pageIds在User类中添加另一个属性,并为此集合中的用户映射所有页面ID.
如何使用Hibernate完成?
lun*_*unr 25
在User课堂上:
@ManyToMany
@JoinTable(
name="user_page",
joinColumns = @JoinColumn(name="id_user"),
inverseJoinColumns = @JoinColumn(name="id_page")
)
public Set<Page> pages;
Run Code Online (Sandbox Code Playgroud)
您可以通过迭代返回的集合来获取id.默认情况下,集合是懒惰的(即只有ids)加载的.
编辑:如果您不想Page出于某种原因进行映射,可以@ElementCollection像这样使用:
@ElementCollection
@CollectionTable(name="user_page", joinColumns=@JoinColumn(name="id_user"))
@Column(name="id_page")
public Set<Long> pageIds;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5177 次 |
| 最近记录: |