我正在尝试在liferay门户中编写自定义sql查询。以下是查询。
SELECT sum(score) as total FROM ratingsentry r WHERE r.modifiedDate>?;
util函数如下。
String sql = CustomSQLUtil.get("GET_TODAY_COUNT");
SQLQuery q = dbSession.createSQLQuery(sql);
QueryPos qPos = QueryPos.getInstance(q);
Calendar cal = Calendar.getInstance();
cal.setTime(new Date());
cal.add(Calendar.DATE, -1);
java.sql.Timestamp timestamp = CalendarUtil.getTimestamp(cal.getTime());
qPos.add(timestamp);
q.addScalar("total", Type.LONG );
Object count=q.uniqueResult();
从上面的 util 方法中,te count 始终返回 0。
非常感谢任何帮助。
试试这个:
Timestamp timestamp = new Timestamp(cal.getTimeInMillis());
我在服务构建器中传递查询,以防它可以帮助您:
String myParameter = "?";
DynamicQuery dynamicQuery = dynamicQuery();
ProjectionList projectionList = ProjectionFactoryUtil.projectionList();
projectionList.add(ProjectionFactoryUtil.sum("score"));
dynamicQuery.setProjection(projectionList);
dynamicQuery.add(RestrictionsFactoryUtil.gt("modifiedDate", myParameter));
List<Object[]> results = logCalendarioPersistence.findWithDynamicQuery(dynamicQuery);
作为一般规则(我不知道这是否是您的情况)聚合函数需要一个“分组依据”,在这种情况下将按您的表的相关值进行分组,为此,您可以使用:
projectionList.add(ProjectionFactoryUtil.groupProperty("myColumn"));
希望您觉得它有帮助。