[暗坑]hibernate的一些新手常见错误1

341

常见坑

  1. hql的查询数量限制失效
  2. hibernate 获取的对象属性莫名其妙值被修改或被清空

结论

  1. hql的limit要通过query.setMaxResults()限制而非"limit n"
  2. 在事务中操作对象属性会被同步至数据库

详解

查询数量限制

当我们需要通过hql进行搜索并限制查询条数时,比如查询查询出当前客户的10条用户信息:

String userSelectHql = "select user from User user where user.tenantId = :tenantId limit 10;"
Query query = entityManager.createQuery(userSelectHql);
query.setParameter("tenantId", tenantId);
List<User> users = quer.getResultList();

最后输出的结果居然是大于10条的,这与我们的预期结果不一致。
从源码可以知道


正确方式应该是这么写,使用query.setMaxResults()

String userSelectHql = "select user from User user where user.tenantId = :tenantId"
Query query = entityManager.createQuery(userSelectHql);
query.setParameter("tenantId", tenantId);
query.setMaxResults(10);
List<User> users = quer.getResultList();