[暗坑]hibernate的一些新手常见错误1
常见坑
- hql的查询数量限制失效
- hibernate 获取的对象属性莫名其妙值被修改或被清空
结论
- hql的limit要通过query.setMaxResults()限制而非"limit n"
- 在事务中操作对象属性会被同步至数据库
详解
查询数量限制
当我们需要通过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();