我必須使用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不客氣。我更新我的答案。 –