获取Hibernate关联关系的pojo。我是指例如一个User(用户)拥有一个many-to-one的属性Unit(单位),但是有时有些用户的Unit属性为空,如果按单位查询用户的时候那些单位为null的用户就会被遗漏,如何调取呢?这本来是很简单的,但是我想当然的使用了Restriction.eq,但是不行,后来看了手册才发现应该使用Restrictions.isNul。
下面是Test代码:
public void getUsersWhosUnitIsNullByRestrictionsEqNullUnit() {
DetachedCriteria dc = DetachedCriteria.forClass(User.class);
dc.add(Restrictions.eq("unit", null));
Criteria cri = dc.getExecutableCriteria(session);
log.debug("getUsersWhosUnitIsNullByRestrictionsEqNullUnit():" + cri.list().size());
}
/** *//**
* 为了获取一个unit为null的用户,如果传入一个id为null的Unit实例则会报错,无法翻译为SQL
* 错误类型为:org.hibernate.TransientObjectException
* 这也不是我们所期望的结果
*/
@Ignore
@Test(expected=TransientObjectException.class)
public void getUsersWhosUnitIsNullByRestrictionsEqUnitNullId() {
Unit unit = new Unit();
log.debug(unit.getId());
DetachedCriteria dc = DetachedCriteria.forClass(User.class);
dc.add(Restrictions.eq("unit", unit));
Criteria cri = dc.getExecutableCriteria(session);
log.debug("getUsersWhosUnitIsNull():" + cri.list().size());
}
/** *//**
* 为了获取一个unit为null的用户正确的方法应该是使用Restrictions.isNull方法
* 因为执行的SQL为:(select * ) from USER_INF this_ where this_.UNIT_ID is null
* 这才是我们所希望的结果
*/
@Test
public void getUsersWhosUnitIsNullByRestrictionsIsNull() {
DetachedCriteria dc = DetachedCriteria.forClass(User.class);
dc.add(Restrictions.isNull("unit"));
Criteria cri = dc.getExecutableCriteria(session);
log.debug("getUsersWhosUnitIsNullByRestrictionsIsNull():" + cri.list().size());
}
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
- 26.
- 27.
- 28.
- 29.
- 30.
- 31.
- 32.
- 33.
- 34.
- 35.
- 36.
- 37.
- 38.
以上介绍获取Hibernate关联关系的方法。
【编辑推荐】