在Java中使用Hibernate的DetachedCriteria来限制结果的最佳方法是什么?

Rub*_*zzo 3 java orm hibernate detachedcriteria

我在Java中使用Hibernate 3.5.6-Final.由于我无法访问Hibernate 会话,因此我使用的是DetachedCriteria.所以,我想知道限制DetachedCriteria结果的最佳方法是什么(在我的情况下,我只希望获得第一行).

附加信息:

标准类有一些方法来实现这一点,像setMaxResults(INT的maxResults)setFirstResult(INT FIRSTRESULT) ,但的DetachedCriteria没有没有.同样,我无法使用Criteria,因为我无法访问Hibernate的Session.

小智 10

这就是我在做的方式,你必须将你的结果包装成执行块.以下示例中的EntityMAnager是org.springframework.orm.hibernate3.HibernateOperations对象:

final DetachedCriteria criteria = DetachedCriteria.forClass(ActivePropertyView.class);
criteria.add(Restrictions.eq("featured", true));
List<ActivePropertyView> result = entityManager.execute(
     new HibernateCallback<List<ActivePropertyView>>() {
         @Override
         public List<ActivePropertyView> doInHibernate(Session session) 
                                         throws HibernateException,SQLException {
                 return criteria.getExecutableCriteria(session).setMaxResults(5).list();
         }
     });
return result;
Run Code Online (Sandbox Code Playgroud)


yor*_*rkw 5

您可以使用Restrictions.sqlRestriction()将纯SQL表达式添加到DetachedCriteria.试试这个:

DetachedCriteria criteria = DetachedCriteria.forClass(Domain.class)
  .add(Restrictions.sqlRestriction("LIMIT 1"));
Run Code Online (Sandbox Code Playgroud)

  • 这不适用于mysql的情况.我观察到'limit 1'在WHERE子句中显示为条件,它不是有效的sql语句. (2认同)