[英]Select from DB be specifying criteria for nested collection
我有这样的实体结构(省略了注释和标识符):
public class A {
List<B> bList;
}
public class B {
List<C> cList;
}
public class C {
String name;
}
如何编写条件(或HQL / JPQL查询)以检索C.name
等于“ Peter”的A
所有实例?
即是这样的:
SELECT * FROM A WHERE A.bList.cList.name = 'Peter'
运行此(JPQL),让我知道您的结果:
SELECT DISTINCT a FROM A a
WHERE
EXISTS
(
SELECT b FROM B b
WHERE EXISTS ( SELECT c FROM C c WHERE c.name = "Peter" AND c.b_id = b.b_id )
AND b.a_id = a.a_id
)
HQL查询应该像
Query query = session.getCurrentSession().createQuery("FROM A AS a WHERE a.bList.cList.name = :cname");
query.setParameter("cname", "Peter");
return query.list();
我假设您的实体关系如下
@Entity
@Table(name = "TABLE_A")
public class A {
@OneToMany(mappedBy="a")
List<B> bList;
}
@Entity
@Table(name = "TABLE_B")
public class B {
@ManyToOne
@JoinColumn(name="a_id")
private A a;
@OneToMany(mappedBy="department")
List<C> cList;
}
@Entity
@Table(name = "TABLE_C")
public class C {
@ManyToOne
@JoinColumn(name="b_id")
private B b;
@Column(name="name")
String name;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.