如何强制Hibernate只返回一个实体而不是束?

时间:2014-03-22 21:28:21

标签: java hibernate

这是我的问题。我正在使用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

1 个答案:

答案 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子句。