将子查询注入Criteria查询

时间:2016-12-30 23:32:06

标签: java postgresql hibernate spring-mvc spring-boot

此方法:

  public List<User> exampleForSO(int size, int page, boolean name, boolean email) {

        Criteria criteria = getSession().getCurrentSession().createCriteria(User.class);

        if (name) {
            criteria.add(Restrictions.isNotEmpty("name"));
        }

        if (email) {
            criteria.add(Restrictions.isNotEmpty("email"));
        }

        criteria.setMaxResults(size);
        criteria.setFirstResult(page);

        List<User> users = criteria.list();

        return users;
    }

生成以下SQL:

Hibernate: select this_.name as y0_, this_.id as y1_ from users this_ where this_.id is not null limit ? offset ?

我怎样才能实现此查询?

Hibernate: select this_.name as y0_, this_.id as y1_, COUNT(*) OVER() as overallCount from users this_ where this_.id is not null limit ? offset ?

基本上我想在查询中添加这一小行:

COUNT(*) OVER() as overallCount

有什么建议吗?

这可以用DetachedCriteria解决吗?

我尝试过:

  1. 创建一个DetachedCriteria并将其作为子查询添加到实际的Criteria查询中,这不是一个选项,我不想要子查询。

  2. 生成RawSQL字符串并尝试将其注入查询,但没有成功。

1 个答案:

答案 0 :(得分:0)

以防有人试图达到同样目的。

我就这样做了:

我在我的User类中创建了一个字段,如下所示:

createText

您可以阅读有关Hibernate Formula Annotation here

的更多信息