【问题标题】:hibernate criteria group Query is wrong休眠条件组查询错误
【发布时间】:2016-07-12 21:11:49
【问题描述】:

我正在尝试使用 Criteria 生成以下查询:

select order_number, order_date, sum(order_amount)
from st_pur_orders
group by ORDER_NUMBER,ORDER_DATE;

这是我的标准:

  Criteria cr = session.createCriteria(StPurOrders.class);
            cr.setProjection(Projections.projectionList()
                    .add(Projections.property("orderNumber"), "orderDate")
                    .add(Projections.sum("orderAmount"))
                    .add(Projections.groupProperty("orderNumber"))
                    .add(Projections.groupProperty("orderDate")));
            cr.setResultTransformer(Transformers.aliasToBean(PurOrderColl.class));
            list = cr.list();

但是在后台生成的查询是这样的:

select this_.ORDER_NUMBER as y0_, sum(this_.ORDER_AMOUNT) as y1_,
    this_.ORDER_NUMBER as y2_, this_.ORDER_DATE as y3_
from STOCK.ST_PUR_ORDERS this_
group by this_.ORDER_NUMBER, this_.ORDER_DATE;

我的问题是为什么ORDER_NUMBER 字段被列出两次?

【问题讨论】:

  • 您是否获得了正确的结果集,或者您的结果中实际上是否出现了重复数据?
  • 我的结果中实际上出现了重复数据,因此我无法映射到 PurOrderColl 类,因为那里只有三个属性。
  • @ErrorNotFoundException 你的条件已经有Projections.groupProperty("orderNumber")。我认为不需要Projections.property("orderNumber"),。能否请您删除它并尝试。
  • @MadhusudanaReddySunnapu 我实际上删除了它们,orderNumber 和 orderDate,现在我有了可以使用的东西:select sum(this_.ORDER_AMOUNT) as y0_, this_.ORDER_NUMBER as y1_, this_.ORDER_DATE as y2_ from STOCK.ST_PUR_ORDERS this_ group by this_.ORDER_NUMBER, this_.ORDER_DATE

标签: java hibernate hibernate-criteria


【解决方案1】:

我的问题是为什么 ORDER_NUMBER 字段被列出两次?

您的条件已经有Projections.groupProperty("orderNumber")。因此生成的查询将在其 select 子句中包含orderNumber。

我认为没有必要明确指定Projections.property("orderNumber")。能否请您删除并尝试。

同样适用于使用groupProperty(..) 指定的任何其他字段。

【讨论】:

  • 看起来我实际上需要删除整行 .add(Projections.property("orderNumber"), "orderDate") 并且它有效。
  • @ErrorNotFoundException 这是真的。事实上,一旦我们包含指定 groupProperty(...),它就会自动包含在 select 子句中。更新了答案以反映它。
  • 非常感谢您的洞察力。
猜你喜欢
  • 2011-06-08
  • 2011-04-13
  • 2017-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多