Here my changes base on Ish Answer:瞭如何通過JPA的Java
public List<TopUpRAMSInfo> listadoTOPUP2(Date fechaI, Date fechaF) {
List<TopUpRAMSInfo> lista;
CriteriaQuery<TopUpRAMSInfo> data = cb.createQuery(TopUpRAMSInfo.class);
Root<TopUpRAMS> c = data.from(TopUpRAMS.class);
data.select(cb.construct(TopUpRAMSInfo.class,
c.get("deviceId"),
cb.sum(c.get("rechargeValue"))
)
);
data.where(cb.greaterThanOrEqualTo(c.get("connectionTime"), fechaI),
cb.lessThanOrEqualTo(c.get("connectionTime"), fechaF)
);
data.groupBy(c.get("deviceId"));
TypedQuery<TopUpRAMSInfo> datos = emDAO.createQuery(data);
lista = datos.getResultList();
return lista;
}
Now im having this error: java.lang.IllegalArgumentException: An exception occured looking on class: class ENTITY.TopUpRAMSInfo for constructor using selection criteria types as arguments. If this CriteriaQuery was not intended to be a constructor query please verify that the selection matches the return type.
----- ORIGINAL POST -----
我遇到一些問題,這樣做創建SUM和GROUP條件查詢。這是我嘗試構建的第一個真正的程序,我需要基於另一個領域總結一個領域。
這裏是我到目前爲止的代碼(注意:TopUpRAMS
是我的實體和emDAO
是我的實體管理器。
public List<TopUpRAMS> listadoTOPUP2(Date fechaI, Date fechaF) {
List<TopUpRAMS> lista;
CriteriaQuery<TopUpRAMS> data = cb.createQuery(TopUpRAMS.class);
Root<TopUpRAMS> c = data.from(TopUpRAMS.class);
data.multiselect(c.get("deviceId"), cb.sum(c.get("rechargeValue")));
data.where(cb.greaterThanOrEqualTo(c.get("connectionTime"), fechaI));
cb.and(cb.lessThanOrEqualTo(c.get("connectionTime"), fechaF));
data.groupBy(c.get("deviceId"));
TypedQuery<TopUpRAMS> datos = emDAO.createQuery(data);
lista = datos.getResultList();
return lista;
}
感謝洛斯伊什...... –
不客氣。順便說一句,如果這篇文章回答了你的問題,請接受它。謝謝! – Ish
這工作..只有變化是在創建Crtieria查詢,代碼應該讀爲 CriteriaQuery data = cb.createQuery(TopUpRAMSInfo.class); –