仅选择符合条件的JPA Collection成员

时间:2013-04-15 15:34:19

标签: java hibernate jpa-2.0 jpql

我正在尝试为实体A选择条目,其中所有的CReference实体集合中的子项符合条件。我目前的查询只要求至少一个成员满足条件。

当前查询

此查询当前选择A类型的所有对象,其中c_references类中的至少一个项目

SELECT a FROM A a INNER JOIN FETCH a.c_references c_refs INNER JOIN FETCH c_refs.c_reference c_ref WHERE (c_ref.flag_one=TRUE AND c_ref.flag_two=TRUE)

A类


@Entity
public class A{

@Id
private UUID a_uuid;

@OneToMany(fetch = FetchType.EAGER)
@JoinColumn(name = "owning_a_uuid")
private List<CReference> c_references;

}

类CReference

@Id
private UUID a_uuid;

@OneToMany(fetch = FetchType.EAGER)
@JoinColumn(name = "owning_a_uuid")
private List<CReference> c_references;

C类


@Entity
// This class keeps references to all of the A objects that have referenced a C object
public class CReference{

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long c_reference_id;

@OneToOne
private A a_referencing_c;

@OneToOne
private C c_reference;

}

1 个答案:

答案 0 :(得分:0)

试试这个:

SELECT a FROM A a 
WHERE NOT EXISTS(    
    SELECT c_refs
    FROM CReference c_refs
        INNER JOIN c.c_reference c_ref    
    WHERE
        c_refs.a_referencing_c = a
        AND (c_ref.flag_one = FALSE OR c_ref.flag_two = FALSE)
)