如何在休眠标准上使用连接列?
How to use joined columns on hibernate criteria?
我有 3 个实体通过一对一关系加入。我的目标是使用 match.status != null
处的休眠条件获取实体。以及如何告诉 hibernate 不要将 algo
实体加入到结果中,应该是 (pick.algo = null)。
@Entity
public class Pick {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int pid;
@Column(columnDefinition="DATETIME")
private Date insertTime;
@Column(columnDefinition="DATETIME")
private Date setupResTime;
@OneToOne
private DbMatch match;
@OneToOne
private Algo algo;
@Transient
private Integer algoID;
....
条件查询:
public List<Pick> getPicksHistory(){
Criteria criteria = session.createCriteria(Pick.class);
criteria.add(Restrictions.isNotNull("match.status"));
return criteria.list();
}
您可以添加别名并将条件应用于别名
Criteria criteria = session.createCriteria(Pick.class);
criteria.createAlias("match", "match", JoinType.INNER_JOIN); //<---
criteria.add(Restrictions.isNotNull("match.status"));
要获取空值,您可以使用例如JoinType.LEFT_OUTER_JOIN
来自休眠文档 (http://docs.jboss.org/hibernate/orm/4.3/manual/en-US/html_single/#querycriteria-associations) :
Criteria criteria = session.createCriteria(Pick.class);
criteria.createAlias("match", "m");
criteria.add(Restrictions.isNotNull("m.status"));
criteria.setFetchMode("algo", FetchMode.LAZY);
criteria.list();
我有 3 个实体通过一对一关系加入。我的目标是使用 match.status != null
处的休眠条件获取实体。以及如何告诉 hibernate 不要将 algo
实体加入到结果中,应该是 (pick.algo = null)。
@Entity
public class Pick {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int pid;
@Column(columnDefinition="DATETIME")
private Date insertTime;
@Column(columnDefinition="DATETIME")
private Date setupResTime;
@OneToOne
private DbMatch match;
@OneToOne
private Algo algo;
@Transient
private Integer algoID;
....
条件查询:
public List<Pick> getPicksHistory(){
Criteria criteria = session.createCriteria(Pick.class);
criteria.add(Restrictions.isNotNull("match.status"));
return criteria.list();
}
您可以添加别名并将条件应用于别名
Criteria criteria = session.createCriteria(Pick.class);
criteria.createAlias("match", "match", JoinType.INNER_JOIN); //<---
criteria.add(Restrictions.isNotNull("match.status"));
要获取空值,您可以使用例如JoinType.LEFT_OUTER_JOIN
来自休眠文档 (http://docs.jboss.org/hibernate/orm/4.3/manual/en-US/html_single/#querycriteria-associations) :
Criteria criteria = session.createCriteria(Pick.class);
criteria.createAlias("match", "m");
criteria.add(Restrictions.isNotNull("m.status"));
criteria.setFetchMode("algo", FetchMode.LAZY);
criteria.list();