JPA:数据库DEFAULT初始化

时间:2018-02-16 16:20:23

标签: java jpa

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

所选答案的作者发表了这样的声明:

  

在此处选择实用方法并初始化java中的所有值。从未听说过告诉JPA / Hibernate在插入/更新中遗漏空值的方法。

相反,他认为你应该告诉JPA要发送什么。

第二个答案的作者指出,使用以下代码可以解决这个问题:

@Column(insertable = false)

查看一些documentation以及答案下面的评论,这个标志不能解决这个问题。它完全阻止了 插入的列,期间。我已经在我的本地机器上对此进行了测试,文档和注释会检查出来。

还有其他建议,声明DEFAULT代码只能放在JPA实体的列定义中。但是,在我看来,这只会违背在SQL方创建默认评论的目的。

所以现在已经发布了这个问题大约8年了(如果我错过了新版本,我很抱歉),如果有一个实际的解决方案,我仍然有点困惑。< / p>

2 个答案:

答案 0 :(得分:0)

如果字段丢失,一种方法可能是在db端进行验证以使事务失败:也就是要求它存在。是否有特定原因需要通过JPA而不是通过服务层进行此类验证?简单的空检查可以完全阻止数据库调用。

答案 1 :(得分:0)

您可以定义@Converter并覆盖其convertToDataBaseColumn()以始终插入null ...因此将使用默认的DB值