参数值[20.0]与预期类型[java.lang.Long]不匹配

时间:2014-03-04 13:18:32

标签: java mysql hibernate

这是我的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 = 2000amountPrecision = 2。因为我的查询中的操作可以是十进制,所以我的参数是Double,我在我的应用程序中输入20.00。

Parameter value [20.0] did not match expected type [java.lang.Long]

在我的数据对象中amountLongamountPrecisionInteger。任何的想法 ?谢谢;)

4 个答案:

答案 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"