HQL 一对多 select 单个查询中的单个对象
HQL one to many select single object in single query
我想检索具有 "inside" 对象 C 的 class A 这样的对象。
我有一个class答:
public class A {
...
@OneToMany(mappedBy = "classA")
private List<B> listOfB;
}
class乙:
public class B {
...
@ManyToOne
@JoinColumn(name = "A_FK")
private A AObject;
@OneToMany(mappedBy = "classB")
private List<C> ListOfC;
}
和class C:
public class C {
...
private String CId;
@ManyToOne
@JoinColumn(name = "B_FK")
private B BObject;
}
解释:我有一个对象A,它有一个对象B的列表(一个B对象只能在一个对象A中),每个对象B里面有几个对象C(对象C只能在一个B中)。
如何在知道对象 C 的 ID 的情况下使用单个 HQL 查询检索对象 A?
试试这个 HQL 查询:
select a from A as a
join a.listOfB as b
join b.listOfC as c
where c.CId = '1234'
完整 java 示例:
Query query = this.session.createQuery("select a from A as a join a.listOfB as b join b.listOfC as c where c.CId = :id");
query.setString("id", "1234");
A a = (A)query.uniqueResult();
事实证明,我不必使用任何连接,因为 hibernate 会自行连接表。此示例的工作查询:
select Bclass.AObject
from B as Bclass
where Bclass.id = (select Cclass.Bclass.id FROM C Cclass WHERE c.Id=:Id)
我想检索具有 "inside" 对象 C 的 class A 这样的对象。
我有一个class答:
public class A {
...
@OneToMany(mappedBy = "classA")
private List<B> listOfB;
}
class乙:
public class B {
...
@ManyToOne
@JoinColumn(name = "A_FK")
private A AObject;
@OneToMany(mappedBy = "classB")
private List<C> ListOfC;
}
和class C:
public class C {
...
private String CId;
@ManyToOne
@JoinColumn(name = "B_FK")
private B BObject;
}
解释:我有一个对象A,它有一个对象B的列表(一个B对象只能在一个对象A中),每个对象B里面有几个对象C(对象C只能在一个B中)。
如何在知道对象 C 的 ID 的情况下使用单个 HQL 查询检索对象 A?
试试这个 HQL 查询:
select a from A as a
join a.listOfB as b
join b.listOfC as c
where c.CId = '1234'
完整 java 示例:
Query query = this.session.createQuery("select a from A as a join a.listOfB as b join b.listOfC as c where c.CId = :id");
query.setString("id", "1234");
A a = (A)query.uniqueResult();
事实证明,我不必使用任何连接,因为 hibernate 会自行连接表。此示例的工作查询:
select Bclass.AObject
from B as Bclass
where Bclass.id = (select Cclass.Bclass.id FROM C Cclass WHERE c.Id=:Id)