如何只从多对多映射表加载ID? [英] How to load only ids from Many to Many mapping tables?
问题描述
在两张表之间的多对多关系中,我怎样才能为第二个实体加载id。
以下是示例解释我想在这里实现的目标。
下面是一个示例模式
create table user(
id int PrimaryKey,
name文本
)
创建表页(
id int PrimaryKey,
page_name text
)
创建表user_page(
id_user int,
id_page int,
PrimaryKey(id_user,id_page)
)
:在用户和页面表格中还有其他列,我没有在这里简单列出。
用户实体:
< pre $
@Entity
@Table(name =user)
public class User {
@id
@column(name = ID)
私人整数ID;
@column(name =name)
私人字符串名称;
...
...
}
@Entity
@Table(name =page)
public class Page {
@id
@column(name =id)
私人整数ID;
@column(name =page_name)
私人字符串名称;
...
...
}
想要做的是添加另一个属性 Set< Integer>
,并为此集合中的用户映射所有页面id。 User
类中的pageIds
<如何使用Hibernate完成这项工作? 在
User
class: @ManyToMany
@JoinTable(
name =user_page,
joinColumns = @JoinColumn(name =id_user),
inverseJoinColumns = @JoinColumn(name =id_page)
)
public Set< Page>页;
您可以遍历返回的集合来获取id。默认情况下,收藏是懒惰(即只有ids)加载。
编辑:如果您不想映射 Page
由于某种原因,您可以使用 @ElementCollection
,例如:
@ElementCollection
@CollectionTable(name =user_page,joinColumns = @ JoinColumn(name =id_user))
@Column(name =id_page)
public Set< Long> pageIds;
In a Many to Many relation between two table with a Mapping table in between, how can I only load ids for the second entity.
Following is the example to explain what I want to achieve here. Below is a sample schema
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)
)
Note: there are additional columns in user and page tables which i have not included here for brevity.
User entity:
@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;
...
...
}
What I want to do is add another attribute Set<Integer> pageIds
in User
class and have all page ids mapped for a user in this collection.
How can this be done using Hibernate?
In User
class:
@ManyToMany
@JoinTable(
name="user_page",
joinColumns = @JoinColumn(name="id_user"),
inverseJoinColumns = @JoinColumn(name="id_page")
)
public Set<Page> pages;
You can get the id's by iterating over the returned set. By default collections are lazily (i.e. only ids) loaded.
EDIT: If you don't want to map Page
for some reason, you can use @ElementCollection
like this:
@ElementCollection
@CollectionTable(name="user_page", joinColumns=@JoinColumn(name="id_user"))
@Column(name="id_page")
public Set<Long> pageIds;
这篇关于如何只从多对多映射表加载ID?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!