小编nfd*_*ort的帖子

在JPA中将实体添加到大型多对多关系中

我有一个Group实体,它具有多对多关系中的User实体列表.它由包含两个ID的典型连接表映射.此列表可能非常大,一组中有一百万或更多用户.

我需要向该组添加一个新用户,通常会是这样的

group.getUsers().add(user);
user.getGroups().add(group);

em.merge(group);
em.merge(user);
Run Code Online (Sandbox Code Playgroud)

如果我了解典型的JPA操作,是否需要将100万+用户的整个列表下拉到集合中以添加新用户然后保存?这对我来说听起来不太可扩展.

我不应该在JPA中定义这种关系吗?我应该直接在这样的情况下操纵连接表条目吗?

请原谅松散的语法,我实际上是在使用Spring Data JPA,所以我不经常直接使用实体管理器,但问题似乎是JPA的一般问题所以我想这样做.

java many-to-many jpa scalability

9
推荐指数
1
解决办法
2976
查看次数

JPA Query - JPQL用于选择具有所有子项且具有一组值的属性的父项

我正在尝试编写一个JPQL查询来返回实体,其中所有实体的子项都具有一组值中的属性.它类似于以下问题,但是有多个可能的值:

Hibernate查询 - 如何选择那些具有匹配值的所有子项的父项?

以下是根据上述问题改编的实际例子......

我想选择那些拥有所有孩子的金发或红头发的父亲.如果只有一个是黑头发的父亲没有被选中.

我已经尝试过对上述问题的答案进行各种调整,比如......

select p from parent where all(parent.children.haircolor) IN ('blonde','redhead')
Run Code Online (Sandbox Code Playgroud)

要么

select p from parent where parent.children.haircolor ALL IN ('blonde','redhead')
Run Code Online (Sandbox Code Playgroud)

没想到那些人会工作,但值得一试.到目前为止只有一件事有效...

select p from parent 
where 0 = (select count(c) from p.children c 
              where c.haircolor NOT IN ('blonde','redhead')
          )
Run Code Online (Sandbox Code Playgroud)

我真的不想为每一行运行这样的计数查询,但我没有看到更好的机制.这并不让我感到惊讶,因为我无法想到用简单的SQL编写这个的任何其他方法,但我也不是那里的大师.有没有更有效的方法来实现这一目标?

jpa one-to-many jpql

8
推荐指数
1
解决办法
7873
查看次数

标签 统计

jpa ×2

java ×1

jpql ×1

many-to-many ×1

one-to-many ×1

scalability ×1