我有一个实体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));
答案 0 :(得分:1)
根据注释-您需要同时为主数据(AA)和明细(BB)创建条件。 这应该可行:
Criteria aaCriteria = getCurrentSession().createCriteria(AA.class,"a");
Criteria bbCriteria = aaCriteria.createCriteria("bb","b");
bbCriteria.add(Restrictions.eq("b.code", 100));
两个级别都有条件对象,您可以为两个级别添加限制。