扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条

/** *//**
* 为了获取一个unit为null的用户,如果传入一个null作为Uint实例则返回的结果总是0
* 因为执行的SQL为:(select * ) from USER_INF this_ where this_.UNIT_ID=''
* 这不是我们所期望的结果
*/
@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());
}如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。