我不明白为什么 Hibernate 试图在它为空时将此字段设置为 VARBINARY。
Java 数据类型为 BigDecimal Oracle 数据类型为 Float
它是这样设置的:
entityManager.createNamedQuery("blah").setParameter("target_field", object.sourceValue)
Run Code Online (Sandbox Code Playgroud)
再次 - sourceValue 是一个 BigDecimal,当我调试它时,该值为空。
当它尝试执行此更新时,我收到 oracle 错误:
ORA-00932: inconsistent datatypes: expected NUMBER got BINARY
Run Code Online (Sandbox Code Playgroud)
这是控制台日志中此属性的显示内容:
o.h.type.descriptor.sql.BasicBinder : binding parameter [8] as [VARBINARY] - [null]
Run Code Online (Sandbox Code Playgroud)
如果我在执行更新之前在 Java 中做了这个愚蠢的 hack:
if (object.sourceValue == null) object.sourceValue = new java.math.BigDecimal(0);
Run Code Online (Sandbox Code Playgroud)
然后它运行良好。所以这个错误的原因绝对不是当字段为空时hibernate做错了什么。
我该如何解决这个问题,以便我可以将字段设置为 null 而不会在休眠状态下对其进行错误处理?
在数据库中,该字段可以为空。
即使使用带有 JPA 的较新版本的 hibernate,该问题似乎也尚未解决5.2.17.Final。
发送空参数会VARBINARY导致错误
ERROR [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] - ERROR: cannot cast type bytea to bigint
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9426 次 |
| 最近记录: |