2012-09-20 47 views
0

我試圖通過eclipselink(JPA)執行插入/更新並在derby中提交。我在執行期間收到以下異常。EclipseLink或Derby在意外的行拋出異常

java.lang.IllegalArgumentException: Precision exceeds 31 digits! 
    at org.apache.derby.client.am.Utils.computeBigDecimalPrecision(Unknown Source) 
    at org.apache.derby.client.net.NetStatementRequest.computeProtocolTypesAndLengths(Unknown Source) 
    .. 
    .. 
    at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeDirectNoSelect(DatabaseAccessor.java:788) 
    at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeNoSelect(DatabaseAccessor.java:863) 
    .. 
    at org.eclipse.persistence.internal.jpa.EJBQueryImpl.executeReadQuery(EJBQueryImpl.java:430) 
    at org.eclipse.persistence.internal.jpa.EJBQueryImpl.getResultList(EJBQueryImpl.java:714) 
    at com.rw.util.RWCommonFactory.getCommonCodeSet(RWCommonFactory.java:194) 
    at com.rw.what.RWTransaction.setProcessedStatusCode(RWTransaction.java:218) 

RWCommonFactory.getCommonCodeSet包含

public RWCommonCodeSet getCommonCodeSet(String name, String value){ 
Query query = manager.createNamedQuery(RWCommonCodeSet.FIND_CODE_NAME_CODE_VALUE); 
query.setParameter("codeName", name.trim()); 
query.setParameter("codeValue", value.trim()); 
List l = query.getResultList(); 
if(l.isEmpty()){ 
    return null; 
} 
else{ 
    return (RWCommonCodeSet) l.get(0); 
} 
} 

RWCommonCodeSet是不包含任何小數列的實體表,但是,讓這裏的精度超過例外。

此外,在此執行過程中,我確實堅持其他包含DECIMAL(31,5)列的實體。

我試着啓用Derby日誌和Eclipse鏈接日誌,但我無法從該日誌中獲取正確的錯誤。

我怎樣才能得到實際的錯誤位置。

謝謝。

+0

vels4j,你有沒有找到問題的根源? –

回答

0

查詢中沒有問題。我認爲,對於Unknown Source,您的實體不使用@Entity,請勿在persistence.xml中進行配置。

+0

這裏是我的命名查詢'@NamedQuery(name = RWCodeSet.FIND_CODE_NAME_CODE_VALUE,query =「SELECT r FROM RWCodeSet r WHERE r.codeName =:codeName and r.codeValue =:codeValue」)''。這裏代碼名和代碼值都是字符串數據類型 – vels4j

+0

似乎你已經完全編輯了你以前的答案,無論如何,這不是一個註釋或持久性配置錯誤。感謝您的回覆。 – vels4j

0

好的,我找到了它。我在數據庫中使用了DECIMAL(10,3),並試圖持續BigDecimal偶爾從double初始化。我有

new BigDecimal(2006.3) 

,而不是

new BigDecimal("2006.3") 

第一個顯然不適合DECIMAL(10,3)。