我必须使用Hibernate进行特定查询。在休眠中嵌套createAlias()
下面的类只是一个简单的例子,使您更容易理解我的场景和我的目标。我在写这篇文章的时候编了个例子,希望我没有犯错(反正不注意错误:D)。
class Father{
int id;
@OneToMany(mappedBy = "father", fetch = FetchType.LAZY)
List<Son> sonList;
}
class Son{
@ManyToOne(targetEntity=Father.class)
@JoinColumn(referencedColumnName = "id", name = "father")
Father father;
@OneToMany(mappedBy = "son", fetch = FetchType.LAZY)
List<Toy> toyList;
}
class Toy{
@ManyToOne(targetEntity=Son.class)
@JoinColumn(referencedColumnName = "id", name = "son")
Son son;
@OneToMany(mappedBy = "Feature", fetch = FetchType.LAZY)
List<Feature> featureList;
}
class Feature{
@ManyToOne(targetEntity=Toy.class)
@JoinColumn(referencedColumnName = "id", name = "toy")
Toy toy;
boolean unisex;
}
我不得不从数据库中Father
与id = 1
选择,与他的亲戚Son
,但只有个儿子,有一个Feature.unisex = true
Toy
。
我不知道如何到达的字段Feature.unisex
。
随着createAlias()
我可以这样做:
Criteria criteria = session.createCriteria(Father.class);
criteria.createAlias("sonList", "sonListAlias");
criteria.add(Restrictions.idEq(1));
criteria.add(Restrictions.in("sonListAlias.toyList", toyList));
,但我不能走的更远。我应该需要这样的东西:
Criteria criteria = session.createCriteria(Father.class);
criteria.createAlias("sonList", "sonListAlias");
criteria.add(Restrictions.in("sonListAlias.toyList.featureList.unisex", unisex));
但当然,这是不正确的做法。
预先感谢您。
谢谢你的男人,你一直很有帮助;你解决了我几乎所有的问题。但是在我的帖子中,可能我还不够清楚。根据你的问题,只有当父亲有一个有玩具的儿子时,我才能得到父亲,就像Feature.unisex = true。我真正需要的是“总是”找到一位父亲,只让他的儿子拥有Feature.unisex = true的玩具。 不知道如果我已经清楚:D – MDP
@MDP不客气。我更新我的答案。 –