java

位置:IT落伍者 >> java >> 浏览文章

hibernate中获取关联属性为null的方式


发布日期:2021年02月13日
 
hibernate中获取关联属性为null的方式
在Hibernate中获取有关联关系的pojo我是指例如一个User(用户)拥有一个manytoone的属性Unit(单位)但是有时有些用户的Unit属性为空如果按单位查询用户的时候那些单位为null的用户就会被遗漏如何调取呢?这本来是很简单的但是我想当然的使用了Restrictioneq但是不行后来看了手册才发现应该使用RestrictionsisNul下面是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());

}

上一篇:深入了解Java的String

下一篇:模拟spring框架注入实现原理