小编典典

如何仅将ID从多对多映射表加载?

hibernate

在两个表之间具有映射表的多对多关系中,如何仅加载第二个实体的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)
)

注意:为简洁起见,在用户表和页表中还有其他列,此处未包括在内。

用户实体:

@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;
 ... 
 ...
}

我想做的是Set<Integer> pageIdsUser类中添加另一个属性,并为此集合中的用户映射所有页面ID。

如何使用Hibernate做到这一点?


阅读 304

收藏
2020-06-20

共1个答案

小编典典

User课堂上:

@ManyToMany
@JoinTable(
    name="user_page",
    joinColumns = @JoinColumn(name="id_user"),
    inverseJoinColumns = @JoinColumn(name="id_page")
)
public Set<Page> pages;

您可以通过遍历返回的集合来获取ID。默认情况下,集合是延迟加载的(即仅id)。

编辑 :如果您Page由于某些原因不想映射,则可以这样使用@ElementCollection

@ElementCollection
@CollectionTable(name="user_page", joinColumns=@JoinColumn(name="id_user"))
@Column(name="id_page")
public Set<Long> pageIds;
2020-06-20