如何在使用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中处理空值?的主要内容,如果未能解决你的问题,请参考以下文章
mysql/python 连接器在处理空值时使用参数和字典死机
JPA 2.1 - @NamedStoredProcedureQuery - ParameterMode.IN - 空值给出错误