TL; DR :您能告诉JPA,请不要将此值插入数据库,如果它为空?让数据库DEFAULT
出来。
长版:
假设我在表格中有以下数据库列:
IS_JOE_COOL_FLAG VARCHAR2(1 BYTE) DEFAULT 'N' NOT NULL
假设我有一个REST服务,其中IS_JOE_COOL_FLAG
是一个可选参数。即用户可能会发送,或者可能不发送。
我想要做的是使用JPA
告诉我的java代码,如果相同的IS_JOE_COOL_FLAG
参数为null,则不要在数据库列REST
中插入任何内容。让数据库做到这一点。
此问题已存在于Stack上,位于here。
所选答案的作者发表了这样的声明:
相反,他认为你应该告诉JPA要发送什么。在此处选择实用方法并初始化java中的所有值。从未听说过告诉JPA / Hibernate在插入/更新中遗漏空值的方法。
第二个答案的作者指出,使用以下代码可以解决这个问题:
@Column(insertable = false)
查看一些documentation以及答案下面的评论,这个标志不能解决这个问题。它完全阻止了 插入的列,期间。我已经在我的本地机器上对此进行了测试,文档和注释会检查出来。
还有其他建议,声明DEFAULT代码只能放在JPA
实体的列定义中。但是,在我看来,这只会违背在SQL
方创建默认评论的目的。
所以现在已经发布了这个问题大约8年了(如果我错过了新版本,我很抱歉),如果有一个实际的解决方案,我仍然有点困惑。< / p>
答案 0 :(得分:0)
如果字段丢失,一种方法可能是在db端进行验证以使事务失败:也就是要求它存在。是否有特定原因需要通过JPA而不是通过服务层进行此类验证?简单的空检查可以完全阻止数据库调用。
答案 1 :(得分:0)
您可以定义@Converter
并覆盖其convertToDataBaseColumn()
以始终插入null ...因此将使用默认的DB值