比方说父实体是Parent
。它与子ManyToMany
有Child
关系。
@Entity
public class Parent{
@ManyToMany(fetch = FetchType.EAGER)
@JoinColumn(name="child_Id")
private Set<Child> childs;
}
还有孩子
@Entity
public class Child{
@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinTable(name = "child_parent",
joinColumns = @JoinColumn(name = "child_id", referencedColumnName = "id"),
inverseJoinColumns = @JoinColumn(name = "parent_id", referencedColumnName = "id"))
Set<Resource> parents;
}
假设我们的父实体是
parent1 has child -> childA, childB, childC;
parent2 has child -> childB, childC;
parent3 has child -> childB, childC, childD;
parent4 has child -> childA, childC;
parent5 has child -> childA, childB, childC, childD;
现在,我要查询所有childA
和childC
在一起的父母。因此,在这种情况下,父母将是parent1
,parent4
和parent5
。
(不接受parent2和parent3,因为它们没有一起childA
和childC
)
我的JPA接口方法签名。
List<Resource> findParentByChilds (@Param("childs") Set<Child> childs)
答案 0 :(得分:1)
这是使用SQL的简单解决方案
Element
如果父母不能两次生育同一个孩子(例如,您在@BootstrapWith(SpringBootTestContextBootstrapper.class)
@OverrideAutoConfiguration(enabled = false)
@AutoConfigureCache
@AutoConfigureDataJpa
@AutoConfigureTestDatabase
@AutoConfigureTestEntityManager
@ImportAutoConfiguration
上具有唯一键,则可以从SELECT parent_id
FROM child_parent
WHERE child_id IN ('childA', 'childC')
GROUP BY parent_id
HAVING COUNT(DISTINCT child_id) = 2
聚合函数中删除(parent_id, child_id)
。
将其转换为JPQL应该很简单,否则您只需使用本机SQL查询即可。