gpt4 book ai didi

hibernate - 如何仅加载多对多映射表中的 id?

转载 作者:行者123 更新时间:2023-12-04 01:35:09 25 4
gpt4 key购买 nike

在两个表之间有一个映射表的多对多关系中,我如何只加载第二个实体的 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 做到这一点?

最佳答案

User类(class):

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

关于hibernate - 如何仅加载多对多映射表中的 id?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16999997/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com