如何在使用JPA的INSERT中处理空值?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在使用JPA的INSERT中处理空值?相关的知识,希望对你有一定的参考价值。

我正在尝试使用JPA从Java执行对Oracle DB表的插入操作。 以下是我的代码:

String coCode;
String coDescription;

/* some operations on data ... */

String queryStatement = 
  "insert into MANAGER_DATA (CO_CODE, CO_DESCRIPTION) values (?1, ?2)";

Query updateQuery = getEntityManager(context).createNativeQuery(queryStatement);

updateQuery.setParameter(1, coCode);
updateQuery.setParameter(2, coDescription.compareTo("") == 0 ? null : coDescription);

updateQuery.executeUpdate();

问题是,在空字符串的情况下,coDescription可以为null,在这种情况下,我希望在表中添加空值(coCode是主键,但coDescription可以为空)。显然我不能直接将null值传递给setParameter函数,就像我上面所做的那样。

如何解决这个问题并允许将空值添加到我的数据库表中?

答案

看起来你可能正在使用受HHH-9165 createNativeQuery's setParameter does not support null bug影响的旧Hibernate版本。升级到Hibernate 5.0.2或更高版本以解决它。按照提到的Jira:

刚刚用Hibernate 5.0.2进行了测试,这个bug似乎已经解决了。

另一答案

Oracle evaluates empty strings as null

例如:

insert into MANAGER_DATA (CO_CODE, CO_DESCRIPTION) values ('my_code', '')

将插入此行:('my_code',null)。

因此你可以把它留空。

以上是关于如何在使用JPA的INSERT中处理空值?的主要内容,如果未能解决你的问题,请参考以下文章

JPA实体代理问题与空值比较

SQL触发器用INSERT上的当前日期替换表中的空值?

如何在 JPQL 中检查 UUID 空值?

如何在实体框架和函数中处理空值

mysql/python 连接器在处理空值时使用参数和字典死机

JPA 2.1 - @NamedStoredProcedureQuery - ParameterMode.IN - 空值给出错误