在Hibernate中获取有关联关系的pojo
我是指例如一个User(用户)拥有一个many
to
one的属性Unit(单位)
但是有时有些用户的Unit属性为空
如果按单位查询用户的时候那些单位为null的用户就会被遗漏
如何调取呢?这本来是很简单的
但是我想当然的使用了Restriction
eq
但是不行
后来看了手册才发现应该使用Restrictions
isNul
下面是Test代码
/***//**
*为了获取一个unit为null的用户如果传入一个null作为Uint实例则返回的结果总是
*因为执行的SQL为(select*)fromUSER_INFthis_wherethis_UNIT_ID=
*这不是我们所期望的结果
*/
@Test
publicvoidgetUsersWhosUnitIsNullByRestrictionsEqNullUnit(){
DetachedCriteriadc=DetachedCriteriaforClass(Userclass);
dcadd(Restrictionseq(unitnull));
Criteriacri=dcgetExecutableCriteria(session);
logdebug(getUsersWhosUnitIsNullByRestrictionsEqNullUnit():+crilist()size());
}
/***//**
*为了获取一个unit为null的用户如果传入一个id为null的Unit实例则会报错无法翻译为SQL
*错误类型为orghibernateTransientObjectException
*这也不是我们所期望的结果
*/
@Ignore
@Test(expected=TransientObjectExceptionclass)
publicvoidgetUsersWhosUnitIsNullByRestrictionsEqUnitNullId(){
Unitunit=newUnit();
logdebug(unitgetId());
DetachedCriteriadc=DetachedCriteriaforClass(Userclass);
dcadd(Restrictionseq(unitunit));
Criteriacri=dcgetExecutableCriteria(session);
logdebug(getUsersWhosUnitIsNull():+crilist()size());
}
/***//**
*为了获取一个unit为null的用户正确的方法应该是使用RestrictionsisNull方法
*因为执行的SQL为(select*)fromUSER_INFthis_wherethis_UNIT_IDisnull
*这才是我们所希望的结果
*/
@Test
publicvoidgetUsersWhosUnitIsNullByRestrictionsIsNull(){
DetachedCriteriadc=DetachedCriteriaforClass(Userclass);
dcadd(RestrictionsisNull(unit));
Criteriacri=dcgetExecutableCriteria(session);
logdebug(getUsersWhosUnitIsNullByRestrictionsIsNull():+crilist()size());
}