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

在Hibernate中获取有关联关系的pojo。我是指例如一个User(用户)拥有一个many-to-one的属性Unit(单位),但是有时有些用户的Unit属性为空,如果按单位查询用户的时候那些单位为null的用户就会被遗漏,如何调取呢?这本来是很简单的,但是我想当然的使用了Restriction.eq,但是不行,后来看了手册才发现应该使用Restrictions.isNul。下面是Test代码...

ExpandedBlockStart.gif ContractedBlock.gif      /** */ /**
InBlock.gif     * 为了获取一个unit为null的用户,如果传入一个null作为Uint实例则返回的结果总是0
InBlock.gif     * 因为执行的SQL为:(select * ) from USER_INF this_ where this_.UNIT_ID=''
InBlock.gif     * 这不是我们所期望的结果
ExpandedBlockEnd.gif     
*/

None.gif    @Test
ExpandedBlockStart.gifContractedBlock.gif    
public   void  getUsersWhosUnitIsNullByRestrictionsEqNullUnit()  dot.gif {
InBlock.gif        DetachedCriteria dc 
= DetachedCriteria.forClass(User.class);
InBlock.gif        dc.add(Restrictions.eq(
"unit"null));
InBlock.gif
InBlock.gif        Criteria cri 
= dc.getExecutableCriteria(session);
InBlock.gif        log.debug(
"getUsersWhosUnitIsNullByRestrictionsEqNullUnit():" + cri.list().size());
ExpandedBlockEnd.gif    }

None.gif    
ExpandedBlockStart.gifContractedBlock.gif    
/** */ /**
InBlock.gif     * 为了获取一个unit为null的用户,如果传入一个id为null的Unit实例则会报错,无法翻译为SQL
InBlock.gif     * 错误类型为:org.hibernate.TransientObjectException
InBlock.gif     * 这也不是我们所期望的结果
ExpandedBlockEnd.gif     
*/

None.gif    @Ignore
None.gif    @Test(expected
= TransientObjectException. class )
ExpandedBlockStart.gifContractedBlock.gif    
public   void  getUsersWhosUnitIsNullByRestrictionsEqUnitNullId()  dot.gif {
InBlock.gif        Unit unit 
= new Unit();
InBlock.gif        log.debug(unit.getId());
InBlock.gif        DetachedCriteria dc 
= DetachedCriteria.forClass(User.class);
InBlock.gif        dc.add(Restrictions.eq(
"unit", unit));
InBlock.gif
InBlock.gif        Criteria cri 
= dc.getExecutableCriteria(session);
InBlock.gif        log.debug(
"getUsersWhosUnitIsNull():" + cri.list().size());
ExpandedBlockEnd.gif    }

None.gif
ExpandedBlockStart.gifContractedBlock.gif    
/** */ /**
InBlock.gif     * 为了获取一个unit为null的用户正确的方法应该是使用Restrictions.isNull方法
InBlock.gif     * 因为执行的SQL为:(select * ) from USER_INF this_ where this_.UNIT_ID is null
InBlock.gif     * 这才是我们所希望的结果
ExpandedBlockEnd.gif     
*/

None.gif    @Test
ExpandedBlockStart.gifContractedBlock.gif    
public   void  getUsersWhosUnitIsNullByRestrictionsIsNull()  dot.gif {
InBlock.gif        DetachedCriteria dc 
= DetachedCriteria.forClass(User.class);
InBlock.gif        dc.add(Restrictions.isNull(
"unit"));
InBlock.gif
InBlock.gif        Criteria cri 
= dc.getExecutableCriteria(session);
InBlock.gif        log.debug(
"getUsersWhosUnitIsNullByRestrictionsIsNull():" + cri.list().size());
ExpandedBlockEnd.gif    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值