当前位置: 首页 > 面试题库 >

如何仅将ID从多对多映射表加载?

葛胜泫
2023-03-14
问题内容

在两个表之间具有映射表的多对多关系中,如何仅加载第二个实体的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课堂上:

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


 类似资料:
  • 有两张数据表,通过第三张数据表来表示关联关系,我们称之为多对多的映射 如上图,通过一个中间数据表的两个字段,分别指向两个对象的主键,可以实现多对多映射。所以,Pet.foods(一个 List<Food>) 或者 Food.pets(一个List<Pet>)就是多对多映射。 在 POJO 中配置多对多映射 在 POJO 类中字段中增加注解 @ManyMany: @Table("t_food")

  • 问题内容: 我正在开发一个处理以下两个实体的应用程序: 产品 (将其命名为X,Y,Z)和 材料 (a,b,c,…)。众所周知,每种产品都有一个配方,指示制造该产品所需的材料。例如,要产生一个X,我们需要2 a,6 c和4 d(X = 2a + 6c + 4d)。 这就是它在数据库表中的反映方式: 第三张表中的“计数”字段是同类材料(本例中为2、6、4)的系数。 所以我想以这种方式编写Product

  • 主要内容:@ManyToMany 示例,程序输出结果多对多映射表示集合值关联,其中任何数量的实体可以与其他实体的集合关联。 在关系数据库中,一个实体的任何行可以被引用到另一个实体的任意数量的行。 完整的项目目录结构如下所示 - @ManyToMany 示例 在这个例子中,我们将创建学生和图书馆之间的多对多关系,以便可以为任何数量的学生发放任何类型的书籍。 这个例子包含以下步骤 - 第1步: 在包中创建一个实体类,包含学生ID(s_id)和学生姓名(

  • 问题内容: 我想使用链接表在Hibernate中映射多对多。我有两个类,例如Parent和Child类: 我用三列的链接表(link_table) ,和。该数据库是SQL Server,并且ID类型是uniqueidentifier。因此,我通常将guid用于id字段。 你怎么能实现这个使用 标签,如果这是要使用正确的标签?您知道有什么好的文档可以做到这一点吗? 我目前正在获取Constraint

  • 有两张数据表,其中A表的某个字段的值指向B表的主键。因为B表的任何一条记录理论上可以对应A表的多条记录,所以称这种 映射为B表对A表数据的一对多映射。 上述结构,如果用 POJO 来表示的话,可以参看下图: 如上图,一个 Master 自然就能对应多个 Pet ,所以, Master.pets (一个 List<Pet>) 就可以指向多个 Pet 对象, 那么我们说 Master.pets 就是

  • 问题内容: 我正在努力进行双向多对多映射,其中顺序在一侧很重要,而在另一侧则不重要。 我有两节课:程序和学生。 一个程序有很多学生,顺序很重要。 程序A 约翰 莎莉 赛斯 程式B 亚历克斯 赛斯 艾米 约翰 一个学生有很多程序,但是顺序在这里并不重要。 John 程序A 程序B 莎莉 程序A 赛斯 程序A 程式B 亚历克斯 程式B 艾米 程式B 因此,似乎我可以在程序和学生之间建立双向的多对多关联