Hibernate 预期 NUMBER 在空字段上得到 BINARY

Tra*_*ant 5 java hibernate

我不明白为什么 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 而不会在休眠状态下对其进行错误处理?

在数据库中,该字段可以为空。

Hou*_*mam 4

即使使用带有 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)