我不明白为什么 Hibernate 试图将此字段设置为空的 VARBINARY。
Java数据类型是BigDecimal Oracle数据类型为Float
设置如下:
entityManager.createNamedQuery("blah").setParameter("target_field", object.sourceValue)
同样 - sourceValue 是一个 BigDecimal,当我调试它时,该值为 null。
当它尝试执行此更新时,出现 oracle 错误:
ORA-00932: inconsistent datatypes: expected NUMBER got BINARY
这是在控制台日志中针对此属性显示的内容:
o.h.type.descriptor.sql.BasicBinder : binding parameter [8] as [VARBINARY] - [null]
如果我在执行更新之前在 Java 中做了这个愚蠢的 hack:
if (object.sourceValue == null) object.sourceValue = new java.math.BigDecimal(0);
然后它运行正常。所以这个错误的原因肯定不是别的,就是hibernate在字段为null的时候做错了什么。
我该如何解决这个问题,以便我可以将字段设置为 null 而不会被 hibernate 错误处理?
在数据库中,该字段可以为空。
最佳答案
即使使用带有 JPA 的更新版本的 hibernate 5.2.17.Final
,看起来问题还没有解决。
null 参数作为 VARBINARY
发送导致错误
ERROR [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] - ERROR: cannot cast type bytea to bigint
关于java - Hibernate 期望 NUMBER 在空字段上得到 BINARY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37336124/