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;
}
我正在尝试创建一个带有条件的查询,以检索所有 AA
的 BB
列表,其中包含等于 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));
拥有两个级别的条件对象,您可以为它们添加限制。
我有一个实体 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
的 BB
列表,其中包含等于 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));
拥有两个级别的条件对象,您可以为它们添加限制。