Hibernate的order by遇到null致数据丢失的问题

Hibernate中可能用到两张(或更多)表映射称为复杂一点的对象的情形,例如每个User(用户)对象关联一个LoginInfo(登录信息)对象,LoginInfo还包括各种属性,例如LastLoginTime。


现在查询所有用户,hql为:

from User u
如果按"User.LoginInfo.LastLoginTime"逆序排列,hql为:
from User u order by u.loginInfo.lastLoginTime desc


通常而言,两种方式,只是排序不同,结果数量是相同的。

但如果“user.loginInfo”为null了,使用有排序的hql,凡是user.loginInfo为null的数据都会被过滤掉无法查询到。


解决办法就是使用left join左连接LoginInfo。改造后的hql如下:

from User u left join u.loginInfo order by u.loginInfo.lastLoginTime desc



如果是用的org.hibernate.Criteria来进行查询,则排序时应调用三参数的createCriteria(String, String, int)方法,用CriteriaSpecification.LEFT_JOIN作为第三个参数值:

criteria.createCriteria("loginInfo", "login").addOrder(Order.asc("login.lastLoginTime"))

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值