JPA:检查集合是否有具有属性的成员

Sil*_*Nak 0 java hibernate jpa jpql

在我的软件中,我有一个实体(我们称之为Member)和另一个实体(我们称之为State)的集合。我需要编写的查询应返回所有没有State特定属性值(例如5)的成员。

以下是实体的相关部分:

public class Member {
    @JoinColumn(name = "MEMBER_ID")
    @OneToMany
    private List<State> states;

    @Column
    private String name;
}

public class State {
    @Column
    private int property;
}
Run Code Online (Sandbox Code Playgroud)

Member请注意,和之间没有双向映射State,该映射是在关系 ( ) 的非拥有方声明的Member。在 SQL 中我会创建一个像这样的查询:

public class Member {
    @JoinColumn(name = "MEMBER_ID")
    @OneToMany
    private List<State> states;

    @Column
    private String name;
}

public class State {
    @Column
    private int property;
}
Run Code Online (Sandbox Code Playgroud)

但我不知道有什么方法可以在 JPQL 中实现相同的功能,而无需在关系的拥有方进行映射。有没有什么方法可以实现这一点而不必费心双向映射?

Chr*_*kov 7

JPA 允许在子查询 from 子句中使用集合引用,因此您可以使用:

SELECT m.name 
FROM Member m 
WHERE NOT EXISTS(
    SELECT 1 
    FROM m.states s 
    WHERE s.property = 5
)
Run Code Online (Sandbox Code Playgroud)

这将准确生成您想要的 SQL。