nfd*_*ort 8 jpa one-to-many 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编写这个的任何其他方法,但我也不是那里的大师.有没有更有效的方法来实现这一目标?
您尝试在看起来像集合属性的内容上使用 JPQL 路径表达式 - 您不能这样做。而是做这样的连接:
SELECT p FROM Parent p JOIN p.children c WHERE c.haircolor IN :hairColorCollection
Run Code Online (Sandbox Code Playgroud)
上面,Parent假设是一个具有集合值属性children的实体,其中每个目标实体都有一个单值haircolor属性。:hairColorCollection是一个参数,应在执行查询之前设置为集合对象。
| 归档时间: |
|
| 查看次数: |
7873 次 |
| 最近记录: |