如何只从多对多映射表加载ID? [英] How to load only ids from Many to Many mapping tables?

查看:119
本文介绍了如何只从多对多映射表加载ID?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在两张表之间的多对多关系中,我怎样才能为第二个实体加载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> User 类中的pageIds ,并为此集合中的用户映射所有页面id。



<如何使用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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆