9

私はそれらの2つのエンティティを持っています

Class A {
    @OneToMany(mappedBy="a")
    private List<B> bs;
}

Class B {

    @ManyToOne
    private A a;

    private String name;
}

1) 名前が ="mohamede1945" の B が少なくとも 1 つあるすべての A を取得するというクエリを作成したいと思います。

2) name = "mohamede1945" の B を持たないすべての A を取得するというクエリを作成したいと思います。

誰でも私を助けることができますか?

4

2 に答える 2

13

まず、このリンクを見て、JOIN を検索すると答えがわかると思います

第二に、ここに私のアプローチがあります:

@Entity
@NamedQueries({
@NamedQuery(name="A.hasBName",query="SELECT a FROM A a JOIN a.b b WHERE b.name = :name"),
@NamedQuery(name="A.dontHasBName",query="SELECT a FROM A a JOIN a.b b WHERE b.name <> :name")
})
Class A { /* as you defined */ }

DAO では、次のように名前付きクエリを作成できます。

public List<A> findByHasBName( String name ){
    Query q = em.createNamedQuery("A.hasBName")
            .setParameter("name", name);
    try{
        return ( (List<A>) q.getResultList());
    } catch ( IndexOutOfBoundsException e){
        return null;
    }
}
于 2011-07-03T18:11:50.020 に答える
12

ANY および ALL 構造を使用して、サブクエリをフィルタリングできます。だから何か

1. FROM A aEntity WHERE 'mohamede1945' = ANY (SELECT bEntity.name FROM aEntity.bs bEntity)

2. FROM A aEntity WHERE 'mohamede1945' <> ALL (SELECT bEntity.name FROM aEntity.bs bEntity)
于 2011-07-03T18:09:42.650 に答える