这是我的问题。我正在使用Hibernate在DB中搜索用户实体。但我的搜索条件不仅允许一个结果(用户)。如何强制Hibernate只返回单个User对象而不是束?
我的代码:
public User findUser(String name) {
return (User) getSession().
createCriteria(User.class).
add(Restrictions.like("name", name, MatchMode.ANYWHERE)).
uniqueResult();
}
匹配多个结果时Hibernate异常的示例:
org.hibernate.NonUniqueResultException: query did not return a unique result: 5
答案 0 :(得分:4)
您的查询会返回多个用户,而不仅仅是一个用户。 uniqueResult()
用于仅返回一个用户的查询,并抛出异常以使您意识到查询实际上不返回唯一结果。如果您只想让第一个用户通过查询返回,请使用
Criteria c = getSession().
createCriteria(User.class).
add(Restrictions.like("name", name, MatchMode.ANYWHERE));
c.setMaxResults(1);
List<User> users = c.list();
return users.isEmpty() ? null : users.get(0);
请注意,您无法保证实际返回的5个用户中的哪一个。为了更具确定性,您应该在查询中添加order by id
子句。