Java Hibernate Critera查询或父子关联

Java Hibernate Critera查询或父子关联,java,hibernate,hibernate-criteria,Java,Hibernate,Hibernate Criteria,我正在使用Hibernate 3.5,我正在尝试执行一个搜索,该搜索将返回包含关键字的父对象,或者如果其子对象之一包含关键字,则返回父项 下面是一个使用Cat的示例: 此查询返回名称以F开头的所有父猫 Criteria criteria = session.createCriteria(Cat.class) .createAlias("kittens", "kits") .add(Restrictions.like("kits.name", "F%"); 此查询返回所有拥有以F

我正在使用Hibernate 3.5,我正在尝试执行一个搜索,该搜索将返回包含关键字的父对象,或者如果其子对象之一包含关键字,则返回父项

下面是一个使用Cat的示例:

此查询返回名称以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文档,那么这个查询与前面的查询相同。这是有意义的,因为我得到的结果与前两个查询相同

我被难住了,想通过标准搜索得到正确的猫集合

我想我可以运行两个单独的查询,然后清理生成的集合,但这似乎是不必要的

如有任何建议,我们将不胜感激。 喵喵。

试试:

Criteria.criteria = session.createCriteria(Cat.class)
.createAlias("kittens", "kits", Criteria.LEFT_JOIN)
.add(Restrictions.or(
    Restrictions.like("name", "F%"),
    Restrictions.like("kits.name", "F%"));
这应该行得通

Criteria.criteria = session.createCriteria(Cat.class)
    .createAlias("kittens", "kits")
    .add(Restrictions.disjunction()
        .add(Restrictions.like("name", "F%")
        .add(Restrictions.like("kits.name", "F%");
Criteria.criteria = session.createCriteria(Cat.class)
    .createAlias("kittens", "kits")
    .add(Restrictions.or(
        Restrictions.like("name", "F%"),
        Restrictions.like("kits.name", "F%"));
Criteria.criteria = session.createCriteria(Cat.class)
.createAlias("kittens", "kits", Criteria.LEFT_JOIN)
.add(Restrictions.or(
    Restrictions.like("name", "F%"),
    Restrictions.like("kits.name", "F%"));