有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Hibernate生成计数(1)

默认情况下,当使用hibernate进行计数时,它将生成计数(*),是否可以将其更改为默认计数(1)?我不想使用HQL来实现这一点。我的意思是当使用criteria.setProjection(Projections.rowCount());


共 (2) 个答案

  1. # 1 楼答案

    如果查询具有GROUP BY,则可以在theProjections类上使用sqlGroupProjection()方法。它有四个参数,第一个是查询的select子句。在第一个参数中,可以定义count(1)而不是count(*)。例如:

    Criteria criteria = sessionFactory.getCurrentSession().createCriteria(EventLog.class, "event")
                    .createAlias("site", "site").setProjection(Projections.projectionList()
                            .add(Projections.sqlGroupProjection("var_val1,count(1) as count",
                                    "var_val1",
                                    new String[]{"var_val1", "count"},
                                    new Type[]{Hibernate.STRING, Hibernate.INTEGER})))
                    .add(Restrictions.ge("event.date_time", strFrom))
                    .add(Restrictions.eq("site.companyID", custid))
    
  2. # 2 楼答案

    您可以通过实现StandartSqlFunction接口来创建自定义计数函数。然后,您必须对正在使用的方言类进行子类化,并使用registerFunction方法在构造函数中注册您的函数