当前位置: 首页 > 面试题库 >

使用Hibernate中的条件按月分组

晋坚
2023-03-14
问题内容

我正在尝试使用Criteria和ProjectionList来获取报告,并且通过hibernate使用它还很新。所以我有这个模型:

private Long _userId;

 private Category _category;

 private Long _companyId;

 private Double _amount;

 private Date _date;

我使用以下命令构建查询:

  public List sumPaymentsByUserCategoryPeriod(Category category, Long userId,Integer period){
  GregorianCalendar from = new GregorianCalendar();
  from.add(Calendar.MONTH, -period);
  List<CategoryAmount> resultDTO= new ArrayList<CategoryAmount>();

  Criteria criteria = getSession().createCriteria(Payment.class);
  criteria.add(Restrictions.eq("_category", category));
  criteria.add(Restrictions.eq("_userId",userId));
  criteria.add(Restrictions.between("_date", from.getTime(), new Date()));

  ProjectionList projectionList = Projections.projectionList();
  projectionList.add(Projections.sum("_amount"));
  projectionList.add(Projections.groupProperty("_date"));
  criteria.setProjection(projectionList);
  return  criteria.list();

 }

基本上,此方法会收到一个Category和一个userId来过滤付款记录和一个期间,这些人将指示从现在到现在我要累加多少个月。如何获得按月分组的总和结果?

任何帮助或提示,我将不胜感激!


问题答案:

我找到了答案,而且非常简单。我为此更改了ProjectionList标准中的“ groupProperty”:

projectionList.add(Projections.sqlGroupProjection(
    "month({alias}.DATE) as month, year({alias}.DATE) as year", 
    "month({alias}.DATE), year({alias}.DATE)", 
    new String[]{"month","year"}, 
    new Type[] {Hibernate.DOUBLE}));

好的。我将解释sqlGroupProjection。第一个参数是“选择”之后查询的一部分,例如:

Select [firstPartOfSqlGroupProjection] * boo;

“ {alias}”是hibernate状态在查询中用于引用表的别名。

sqlGroupProjection函数的第二个参数是按条件分组,第三个参数是从分组依据中获取的列名,最后是要使用的数据类型。



 类似资料:
  • 问题内容: 我已经使用以下代码实现了分页: 当我手动构建SQL查询并将其提交到数据库时,我得到8个结果。但是,当我尝试上述代码时,在将ResultTransformer设置为DISTINCT_ROOT_ENTITY之前,将获得8个结果(没有区别),而在设置之后,我将获得4个结果。但是我应该得到8个结果(使用DISTINCT),因为当我手动构建SQL时没有区别时,我得到11个结果,而当我使用DIST

  • 问题内容: 如何将sql查询写入hibernate条件? 问题答案: 想我找到了答案。您必须使用Projection.sqlProjection()而不是Projections.sum()。例:

  • 问题内容: 我有一个SQLite数据库,其中包含交易,每个交易都有一个 价格 和一个 transDate 。 我想检索按月分组的交易总和。检索到的记录应类似于以下内容: 问题答案: 当您按MONTH分组时总是很好,还应该检查YEAR 对于SQLITE

  • 问题内容: 我有一个具有此架构的表 我正在尝试使查询工作显示每个月的总数。到目前为止,我已经尝试过DateDiff和嵌套选择,但都没有给我想要的东西。我认为这是最接近的: 但是当我应该获取值时,我只会得到空值。我想念什么吗? 问题答案: 您也可以尝试:

  • 问题内容: 我有两个实体:和。我正在使用Hibernate 3.6。 如何使用休眠标准实现这一目标,最重要的是,我必须将其用于分页。 而“我的道”如下所示以显示jqgrid中的“问题”列表 公共列表showHelpDeskIssues(DetachedCriteria dc,int from,int size){ 对于简短的解释,请参考此问题,如何使用struts2-jqgrid插件在jqgrid

  • 问题内容: 我想要 但是这个查询不能使用 如何使用SQLAlchemy做到这一点? 问题答案: 假设您的数据库引擎实际上支持诸如之类的功能,则可以尝试 否则你可以像