我正在使用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文档,则此查询与上一个查询相同。这是有道理的,因为我得到了与前两个查询相同的结果。
作为一种通过标准搜索得到正确的猫群结果的方式,我被难住了。
我想我可以运行两个单独的查询,然后清理结果集合,但似乎不必要的不雅。
任何建议表示赞赏。 喵。