【发布时间】:2018-07-27 14:28:58
【问题描述】:
TL;DR :你能告诉JPA,如果它为空,请不要将这个值插入数据库?让数据库DEFAULT出来吧。
加长版:
假设我在一个表中有以下数据库列:
IS_JOE_COOL_FLAG VARCHAR2(1 BYTE) DEFAULT 'N' NOT NULL
假设我有一个 REST 服务,其中 IS_JOE_COOL_FLAG 是一个可选参数。即用户可能会发送它,也可能不会。
我想要做的是告诉我的 java 代码,使用 JPA,如果相同的 REST 参数为空,则不要在数据库列 IS_JOE_COOL_FLAG 中插入任何内容。让数据库来做这件事。
这样的问题已经存在于 Stack 上,位于 here。
所选答案的作者发表以下声明:
这里选择务实的方法,初始化java中的所有值。从未听说过告诉 JPA/Hibernate 在插入/更新中省略空值的方法。
相反,他认为你应该告诉 JPA 发送什么。
第二个答案的作者说这个问题可以用下面的代码解决:
@Column(insertable = false)
查看一些documentation,以及答案下方的 cmets,此标志不能解决该问题。它完全防止 从被插入的列,句号。我已经在我的本地机器上对此进行了测试,并且文档和 cmets 确实进行了检查。
还有其他建议,说明 DEFAULT 代码可以放在JPA 实体的列定义中。但是,在我看来,这违背了在SQL 端创建默认评论的目的。
既然这个问题已经发布了大约 8 年,(如果我错过了更新的版本,我深表歉意),如果有一个实际的解决方案,我仍然有点困惑。
【问题讨论】:
-
我认为没有为空的列的 INSERT 将下降到它的默认值,尝试寻找一种忽略它的方法