19

查询执行是否总是必须返回一个列表?如果我确定它只会返回一个对象,我该如何替换下面的代码?

@Override
    public List<DocInfo> findAllByDocId(String docId)
    {
        Query q = getCurrentSession().createQuery("from DocInfo item where item.id = :docId");
        q.setString("docId", docId);
        List<DocInfo> docInfoList = q.list();
        return docInfoList;
    }
4

3 回答 3

22

如果我没记错的话,您可以将Query#uniqueResult()与 Hibernate 一起使用。我认为这就是你要找的。在这种情况下,NonUniqueResultException如果查询返回的行不止一行,则必须在代码中处理。

于 2012-09-14T15:40:24.137 回答
6

您可以使用

query.getSingleResult();

当您完全确定查询将只返回一行时,我正在谈论

import javax.persistence.Query;
于 2012-09-14T15:43:31.340 回答
0

如果您是通过 id (pk) 加载的,就像您在这里一样,您真的应该使用 Session.load/Session.get 来代替。

于 2012-09-14T17:21:18.377 回答