我正在尝试编写一个 JPQL 查询来返回实体,其中所有实体的子项都具有一组值中的属性。它类似于以下问题,但有多个可能的值:
这是一个改编自上述问题的实际示例...
我想选择那些所有孩子都是金发或红发的父亲。如果只有一个是黑发的,则不会选择父亲。
我已经尝试了对上述问题的答案的各种改编,比如......
select p from parent where all(parent.children.haircolor) IN ('blonde','redhead')
或者
select p from parent where parent.children.haircolor ALL IN ('blonde','redhead')
没想到这些会起作用,但值得一试。到目前为止,只有一件事奏效了……
select p from parent
where 0 = (select count(c) from p.children c
where c.haircolor NOT IN ('blonde','redhead')
)
我真的不希望对每一行都运行这样的计数查询,但我没有看到更好的机制。这并不完全让我感到惊讶,因为我想不出用普通 SQL 编写它的任何其他方式,但我也不是那里的专家。有没有更有效的方法来实现这一点?