【问题标题】:entitymanager : min and max are not retained by Queryentitymanager:查询不保留最小值和最大值
【发布时间】:2014-11-28 15:09:23
【问题描述】:

上下文:Netbeans 8.0.1、JSF 2.2、Primefaces 5.0、JDK 1.7、eclipseLink 2.5.2

查询似乎没有保留最小值和最大值: 这是我的 jpql 声明:

Query query = em.createQuery("SELECT po.customerId.customerId, MAX(po.shippingCost), 
MIN(po.shippingCost), COUNT(po.orderNum) countligne, 
COUNT(DISTINCT po.productId.productId)\n"   
+"FROM PurchaseOrder po WHERE po.customerId.customerId = :Id
  GROUP BY` po.customerId.customerId");

这是eclipselink记录sql:

SELECT t0.CUSTOMER_ID, COUNT(t1.ORDER_NUM), COUNT(DISTINCT(t2.PRODUCT_ID)) 
FROM CUSTOMER t0, PRODUCT  t2, PURCHASE_ORDER t1 WHERE ((t1.CUSTOMER_ID = ?) 
AND ((t0.CUSTOMER_ID = t1.CUSTOMER_ID) AND (t2.PRODUCT_ID = t1.PRODUCT_ID)))
GROUP BY t0.CUSTOMER_ID

怎么了?

【问题讨论】:

    标签: java sql aggregate-functions jpql entitymanager


    【解决方案1】:

    好像count字段别名扰乱了eclipselink,导致结果列列表不准确:

    ..., COUNT(po.orderNum) countligne, ...
    

    当我取消 'countline' 别名时,一切都会完美运行。

    最奇怪的是,当聚合字段没有被渲染时,没有任何错误,甚至警告。

    【讨论】:

    • 很有趣,听起来像个bug。
    猜你喜欢
    • 2012-09-16
    • 1970-01-01
    • 2019-03-13
    • 1970-01-01
    • 2022-11-25
    • 1970-01-01
    • 2017-04-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多