这是我的Java应用程序中的一个函数:
public List<History> test(Double amount) {
String q = "SELECT h FROM History h WHERE (h.amount/POW(10,h.amountPrecision)) = :amount";
Query query = em.createQuery(q);
query.setParameter("amount", amount);
return query.getResultList();
}
例如,在我的数据库中,我有amount = 2000
和amountPrecision = 2
。因为我的查询中的操作可以是十进制,所以我的参数是Double
,我在我的应用程序中输入20.00。
Parameter value [20.0] did not match expected type [java.lang.Long]
在我的数据对象中amount
是Long
,amountPrecision
是Integer
。任何的想法 ?谢谢;)
答案 0 :(得分:1)
在你的方法测试中(双倍数量)金额有数据类型Double但在左边的WHERE子句中是长数据类型而在右边也必须我长。
可能是您必须将方法测试签名更改为:
public List<History> test(Long amount)
答案 1 :(得分:0)
尝试将查询更改为:
SELECT h FROM History h WHERE (cast(h.amount as double)/POW(10,h.amountPrecision)) = :amount
答案 2 :(得分:0)
尝试将其更改为
query.setParameter("amount",amount.longValue());
您在应该放置double
值的位置传递Long
值。
答案 3 :(得分:0)
通过更改查询来解决问题:
"SELECT h FROM History h WHERE (CONVERT(h.amount, DECIMAL)/POW(10,h.amountPrecision)) = :amount"