EclipseLink或Derby在意外行引发异常

时间:2012-09-20 15:37:53

标签: java jpa eclipselink derby

我正在尝试执行插入/更新并通过eclipselink(JPA)在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链接日志,但是我无法从该日志中获得正确的错误。

如何获得实际的错误位置。

感谢。

2 个答案:

答案 0 :(得分:0)

您的查询没有问题。我认为,对于Unknown Source,您的实体不使用@Entity,请勿在{{1​​}}中进行配置。

答案 1 :(得分:0)

好的,我追查了它。我在数据库中有DECIMAL(10,3),并试图保持BigDecimal偶尔从double初始化。我有

new BigDecimal(2006.3) 

而不是

new BigDecimal("2006.3") 

第一个显然不适合DECIMAL(10,3)。