2

我正在尝试将我的 postgres 本机查询迁移到使用标准构建器。

我想要实现的是: select date_trunc('day',t.starttime) AS day, count(*) AS no_of_users from login_table t group by 1 order by 1

到目前为止,我还没有看到如何按 1 顺序构建组。

这是我已经走了多远:

    CriteriaBuilder cb = em.getCriteriaBuilder();
    CriteriaQuery<RequestPerWeek> cq = cb.createQuery(RequestPerWeek.class);
    Root<TLogin> from = cq.from(TLogin.class);
    String date = "week";
    Expression<Calendar> dateTrunc=cb.function("date_trunc",Calendar.class,cb.literal(date), from.get(TLogin_.starttime).as(Calendar.class));
    cq.select(cb.construct(RequestPerWeek.class,cb.count(from),dateTrunc));

我尝试了几种 groupby 替代方案,但没有人像我想要的那样工作:-|

最好的问候,hw

4

1 回答 1

-1

我们在我们的项目中使用的是spring data jpa,如果你使用它,就不需要为简单的查询编写条件查询,你可以直接在你的方法之上编写查询并得到结果。这种方法是“使用命名参数”

例如,

public interface UserRepository extends JpaRepository<User, Long> {

  @Query("select u from User u where u.firstname = :firstname or u.lastname = :lastname")
  User findByLastnameOrFirstname(@Param("lastname") String lastname,
                                 @Param("firstname") String firstname);
}

下面的链接对于使用 spring data jpa 的任何人都很有用,如果您正在编写条件查询,请查看是否可以使用命名参数方法获得结果。这很简单,您编写的代码非常少。

http://docs.spring.io/spring-data/data-jpa/docs/1.4.x/reference/htmlsingle/#jpa.named-parameters

于 2016-03-14T17:58:23.147 回答