如何使用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;
}
答案 0 :(得分:9)
前一段时间,我有同样的疑问,我认为这是无效的。所以我现在所做的就是搜索第一个巧合而且速度更快。
protected boolean exists(final Criteria query) {
query.setProjection(Projections.id());
query.setMaxResults(1);
return query.uniqueResult() != null;
}
我希望有所帮助。