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;