JPA eclipselink JPQL 中的整数总和不是整数?
JPA eclipselink sum of integer in JPQL are not integers?
我正在使用 Eclipselink 和 postrgresql。
我的实体是
public class PedaneMovimenti extends EntityBaseGest implements Serializable {
private static final long serialVersionUID = 1L;
...
@Column(name = "importo", nullable = false)
private Integer importo = 0;
...
在我的 JPQL 命名查询中,我对列 importo 求和,然后在 class.
的构造函数中使用该值
我有两个用于 class 的构造函数用作投影:
public SaldoPedaneCliente(AnagraficaPGF anagrafica, TipoBancale tipo, Integer saldo);
public SaldoPedaneCliente(AnagraficaPGF anagrafica, TipoBancale tipo, Long saldo);
JPQL 查询是
SELECT new com.path.SaldoPedaneCliente(
mov.mastro.anagrafica,
mov.tipobancale,
(
COALESCE(
SELECT SUM(m.importo)
FROM PedaneMovimenti m
WHERE m.mastro.anagrafica = mov.mastro.anagrafica AND m.tipobancale = mov.tipobancale
AND m.verso = com.bsssrl.bssstdgest.enums.VersoMovimento.IN
, 0)
))
from PedaneMovimenti mov WHERE mov.mastro.anagrafica IS NOT NULL
GROUP BY mov.mastro.anagrafica, mov.tipobancale
查询正常,有效。
我在构造函数中有一个类型不匹配:
javax.persistence.PersistenceException: java.lang.IllegalArgumentException: argument type mismatch
如果我用常量(例如 1)更改子查询,它工作正常,但如果我使用总和,我有例外。
那么,Integers 的求和不是 Integers 或 Long 吗?
编辑:我也试过 SELECT SUM(1)
但我有同样的错误。
"Integer"s 的总和是 "Long" !
我改变了构造函数的顺序:首先是 Long 版本,然后是 Integer 版本,它可以工作。
我正在使用 Eclipselink 和 postrgresql。
我的实体是
public class PedaneMovimenti extends EntityBaseGest implements Serializable {
private static final long serialVersionUID = 1L;
...
@Column(name = "importo", nullable = false)
private Integer importo = 0;
...
在我的 JPQL 命名查询中,我对列 importo 求和,然后在 class.
的构造函数中使用该值我有两个用于 class 的构造函数用作投影:
public SaldoPedaneCliente(AnagraficaPGF anagrafica, TipoBancale tipo, Integer saldo);
public SaldoPedaneCliente(AnagraficaPGF anagrafica, TipoBancale tipo, Long saldo);
JPQL 查询是
SELECT new com.path.SaldoPedaneCliente(
mov.mastro.anagrafica,
mov.tipobancale,
(
COALESCE(
SELECT SUM(m.importo)
FROM PedaneMovimenti m
WHERE m.mastro.anagrafica = mov.mastro.anagrafica AND m.tipobancale = mov.tipobancale
AND m.verso = com.bsssrl.bssstdgest.enums.VersoMovimento.IN
, 0)
))
from PedaneMovimenti mov WHERE mov.mastro.anagrafica IS NOT NULL
GROUP BY mov.mastro.anagrafica, mov.tipobancale
查询正常,有效。 我在构造函数中有一个类型不匹配:
javax.persistence.PersistenceException: java.lang.IllegalArgumentException: argument type mismatch
如果我用常量(例如 1)更改子查询,它工作正常,但如果我使用总和,我有例外。
那么,Integers 的求和不是 Integers 或 Long 吗?
编辑:我也试过 SELECT SUM(1)
但我有同样的错误。
"Integer"s 的总和是 "Long" !
我改变了构造函数的顺序:首先是 Long 版本,然后是 Integer 版本,它可以工作。