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

问题描述 投票:1回答:2

我正在尝试使用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函数,就像我上面所做的那样。

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

java oracle jpa
2个回答
0
投票

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

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


0
投票

Oracle evaluates empty strings as null

例如:

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

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

因此你可以把它留空。

© www.soinside.com 2019 - 2024. All rights reserved.