【问题标题】:Hibernate inheritance: join query with criteriaHibernate 继承:使用条件连接查询
【发布时间】:2019-09-23 08:17:51
【问题描述】:

我有一个实体 AA 与实体 BBBB 具有多对多关系扩展另一个实体 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));

【问题讨论】:

  • 这是所有标准吗?对于 master master-datail,我在这里缺少对 master 的引用。我会获取 master - AA,然后将 BB 与 fetchJoin 一起加入以拥有所有这些。之后,我会将过滤器设置为 b.code = 100。
  • @MichałZaborowski 这不是所有标准它仍然是这部分Criteria crit = session.createCriteria(AA.class);

标签: hibernate jpa hibernate-criteria


【解决方案1】:

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

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

拥有两个级别的标准对象,您可以为这两个级别添加限制。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-27
    • 2012-08-28
    • 2022-06-16
    • 2012-05-01
    相关资源
    最近更新 更多