检查存在于hibernate准则API中

时间:2013-11-05 08:16:32

标签: hibernate

如何使用Hibernate Criteria最好地表达“存在”查询?

在我的项目中,人们使用计数投影来检查是否有任何行符合条件(计数> 0)。为了更有效,我更喜欢使用exists。

以下是按标准计算的基本代码:

public int count(final DetachedCriteria criteria) throws DataAccessException {

    Object countResult =  executeWithNativeSession(new HibernateCallback() {
        public Object doInHibernate(Session session) throws HibernateException {
            Criteria executableCriteria = criteria.getExecutableCriteria(session);
            executableCriteria.setProjection(Projections.rowCount());

            prepareCriteria(executableCriteria);

            return executableCriteria.uniqueResult();
        }
    });
    if (countResult == null) {
        countResult = 0;
    }

    return (Integer) countResult;
}

1 个答案:

答案 0 :(得分:9)

前一段时间,我有同样的疑问,我认为这是无效的。所以我现在所做的就是搜索第一个巧合而且速度更快。

protected boolean exists(final Criteria query) {
    query.setProjection(Projections.id());
    query.setMaxResults(1);
    return query.uniqueResult() != null;
}

我希望有所帮助。