Hibernate 继承:使用条件连接查询

Hibernate inheritance: join query with criteria

我有一个实体 AA,它与一个实体 BB 有多对多的关系,并且 BB 扩展了另一个实体 CC(使用继承策略 JOIN)。

    @Entity
    class AA {

   @ManyToMany
   @JoinTable(name = "AA_BB", joinColumns = @JoinColumn(name = "ID_AA", referencedColumnName = "ID_AA"), inverseJoinColumns = @JoinColumn(name = "ID_BB", referencedColumnName = "ID_BB"), uniqueConstraints = @UniqueConstraint(columnNames = {
        "ID_AA", "ID_BB" }))
    private List<BB> bb = new ArrayList<>();
    }

    @Entity
    class BB extends CC {
    }

    @Entity
    @Inheritance(strategy = JOINED)
    abstract class CC {

    @Column
    private long code;

    }

我正在尝试创建一个带有条件的查询,以检索所有 AABB 列表,其中包含等于 100 的代码。

以下代码不起作用,我得到了一个类型的异常: 嵌套异常是 org.hibernate.ObjectNotFoundException:不存在具有给定标识符的行

            criteria.createAlias("bb", "b", JoinType.INNER_JOIN);
            criteria.add(Restrictions.eq("b.code", 100));

根据评论 - 您需要为主 (AA) 和细节 (BB) 创建标准。 这是应该起作用的东西:

Criteria aaCriteria = getCurrentSession().createCriteria(AA.class,"a");
Criteria bbCriteria = aaCriteria.createCriteria("bb","b");
bbCriteria.add(Restrictions.eq("b.code", 100));

拥有两个级别的条件对象,您可以为它们添加限制。