我正在使用Hibernate 3.5,我試圖做一個搜索,它將返回一個包含關鍵字的父對象,或者如果其中一個子對象包含一個父項,則返回一個父項關鍵詞。休眠Critera查詢OR父子關聯
這裏是使用Cat從Hibernate Documentation一個例子:
@Entity
@Table(name="cats")
public class Cat {
private String name;
private Set<Cat> kittens;
}
下面是從Criteria Query部的示例查詢:
Criteria criteria = session.createCriteria(Cat.class)
.add(Restrictions.like("name", "F%")
.createAlias("kittens", "kits")
.addRestrictions.like("kits.name", "F%");
List<Cat> cats = criteria.list();
這將只返回貓對象,其中的名稱父母以F開頭,並且其中一隻小貓的名字以F開頭。我想創建一個查詢來返回這些限制的邏輯和。貓的名字以F開頭,或貓的名字以F開頭的小貓。 例子:(貓:[Kittens]) Fritz:[],Frank:[Al,Barry],Charlie:[Fran];應該都包含在結果集中。 雖然鮑勃:[]和邁克:[艾倫,博斯科]不應該。
我已經嘗試了幾個不同的查詢,但一直無法獲得正確的結果。
Criteria criteria = session.createCritera(Cat.class)
.add(Restrictions.like("name", "F%);
該查詢返回所有家長貓名稱以F.
Criteria criteria = session.createCriteria(Cat.class)
.createAlias("kittens", "kits")
.add(Restrictions.like("kits.name", "F%");
該查詢返回誰擁有小貓他的名字與F. 這是我的麻煩開始的地方開始的所有父貓,我需要這兩套的分離。首先我試過:
Criteria.criteria = session.createCriteria(Cat.class)
.createAlias("kittens", "kits")
.add(Restrictions.disjunction()
.add(Restrictions.like("name", "F%")
.add(Restrictions.like("kits.name", "F%");
此查詢不起作用。它僅返回子女姓名以F開頭的父母,就像之前的查詢一樣。
Criteria.criteria = session.createCriteria(Cat.class)
.createAlias("kittens", "kits")
.add(Restrictions.or(
Restrictions.like("name", "F%"),
Restrictions.like("kits.name", "F%"));
如果我正確閱讀API文檔,則此查詢與上一個查詢相同。這是有道理的,因爲我得到了與前兩個查詢相同的結果。
作爲一種通過標準搜索得到正確的貓羣結果的方式,我被難住了。
我想我可以運行兩個單獨的查詢,然後清理結果集合,但似乎不必要的不雅。
任何建議表示讚賞。 喵。