【问题标题】:EclipseLink or Derby throws exception at unexpected lineEclipseLink 或 Derby 在意外行引发异常
【发布时间】:2012-09-20 15:37:53
【问题描述】:

我正在尝试通过 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 链接日志,但我无法从该日志中得到正确的错误。

我怎样才能得到实际的错误位置。

谢谢。

【问题讨论】:

  • vels4j,你找到问题的根源了吗?

标签: java jpa eclipselink derby


【解决方案1】:

您的查询没有问题。我认为,对于Unknown Source,你的实体不使用@Entity,不要在persistence.xml中配置。

【讨论】:

  • 这是我的命名查询@NamedQuery(name = RWCodeSet.FIND_CODE_NAME_CODE_VALUE, query = "SELECT r FROM RWCodeSet r WHERE r.codeName = :codeName and r.codeValue=:codeValue")。这里的代号和代号都是字符串数据类型
  • 似乎你已经完全编辑了你以前的答案,无论如何这不是注释或持久性配置错误。感谢您的回复。
【解决方案2】:

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

new BigDecimal(2006.3) 

而不是

new BigDecimal("2006.3") 

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-17
    • 1970-01-01
    • 2010-10-20
    • 1970-01-01
    • 2015-06-14
    • 2021-12-12
    • 1970-01-01
    相关资源
    最近更新 更多