在两个表之间具有映射表的多对多关系中,如何仅加载第二个实体的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> pageIds在User类中添加另一个属性,并为此集合中的用户映射所有页面ID。
Set<Integer> pageIds
User
如何使用Hibernate做到这一点?
在User课堂上:
@ManyToMany @JoinTable( name="user_page", joinColumns = @JoinColumn(name="id_user"), inverseJoinColumns = @JoinColumn(name="id_page") ) public Set<Page> pages;
您可以通过遍历返回的集合来获取ID。默认情况下,集合是延迟加载的(即仅id)。
编辑 :如果您Page由于某些原因不想映射,则可以这样使用@ElementCollection:
Page
@ElementCollection
@ElementCollection @CollectionTable(name="user_page", joinColumns=@JoinColumn(name="id_user")) @Column(name="id_page") public Set<Long> pageIds;