簡體   English   中英

參數值[20.0]與預期的類型[java.lang.Long]不匹配

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

這是我的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 = 2000amount = 2000 amountPrecision = 2 由於我可以在查詢中進行十進制運算,因此我的參數為Double並在應用程序中輸入20.00。

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

在我的數據對象中, amountLongamountPrecisionInteger 任何想法 ? 謝謝 ;)

您的方法中test(Double amount)的數量為Double,但是在WHERE子句中左側為long數據類型,右側也必須為long。

可能是您必須將方法測試簽名更改為:

public List<History> test(Long amount) 

嘗試將查詢更改為:

SELECT h FROM History  h WHERE (cast(h.amount as double)/POW(10,h.amountPrecision)) = :amount

嘗試將其更改為

query.setParameter("amount",amount.longValue());

您在應該放置Long值的地方傳遞了double值。

通過更改查詢解決了問題:

"SELECT h FROM History  h WHERE (CONVERT(h.amount, DECIMAL)/POW(10,h.amountPrecision)) = :amount"

嘗試這個;

query.setParameter("amount", new Double(amount));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM