moh*_*945 7 jpa one-to-many many-to-one construct
我有这两个实体
Class A {
@OneToMany(mappedBy="a")
private List<B> bs;
}
Class B {
@ManyToOne
private A a;
private String name;
}
Run Code Online (Sandbox Code Playgroud)
1)我想构建一个查询,说明所有A至少有一个名字="mohamede1945"的B
2)我想构建一个查询,说明所有没有任何B的名字="mohamede1945"
谁能帮助我?
小智 12
首先,我想你可以通过查看这个链接了解答案,搜索JOIN:http://download.oracle.com/docs/cd/E11035_01/kodo41/full/html/ejb3_langref.html
其次,这是我的方法:
@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 */ }
Run Code Online (Sandbox Code Playgroud)
在你DAO中,你可以像这样制作namedquery:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
Bas*_*Roy 11
您可以使用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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22837 次 |
| 最近记录: |