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

时间:2019-09-23 08:17:51

标签: hibernate jpa hibernate-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;

    }

我正在尝试创建一个具有条件的查询,以检索包含列表AA(包含等于100的代码)的所有BB

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

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

1 个答案:

答案 0 :(得分:1)

根据注释-您需要同时为主数据(AA)和明细(BB)创建条件。 这应该可行:

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

两个级别都有条件对象,您可以为两个级别添加限制。