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

时间:2018-10-25 13:30:05

标签: java oracle jpa

我正在尝试使用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,在这种情况下,我也希望在表中添加null值(coCode是主键, coDescription可为空)。显然,我无法像上面一样将null值直接传递给setParameter函数。

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

2 个答案:

答案 0 :(得分:0)

Oracle evaluates empty strings as null

例如:

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

将插入以下行:(“ my_code”,null)。

因此,您可以将其保留为空字符串。

答案 1 :(得分:0)

好像您正在使用受HHH-9165 createNativeQuery's setParameter does not support null错误影响的旧Hibernate版本。升级到Hibernate 5.0.2或更高版本以解决它。按照提到的吉拉:

  

只需使用Hibernate 5.0.2对其进行测试,该错误似乎就可以解决。