当前位置: 首页 > 知识库问答 >
问题:

Spring-JPA-插入-不传递具有默认抛出错误的字段的值

别锐
2023-03-14

表中某些不可为null的字段具有默认值。当通过JPA向表中插入新行时,我不想为这些字段传递任何值,以便它们获得默认值。然而,当通过Spring JPA存储库类插入新行时,我得到一个错误,即不能插入空值。我注意到JPA发送到数据库的insert语句列出了所有字段:

insert into table (field1, field2, field3) values ('abc',null,null);

由于field2和field3指定了null,所以不会分配默认值,数据库会抛出无法插入null值的错误。是否有解决方法?

共有2个答案

扶冠宇
2023-03-14

如果你想给数据库分配默认值。你不应该把它作为NULL插入,而是你必须把它留出来,也不要插入它,为此你可以使用@Col列(可插入=false)注释。

事实上,我认为在使用ORM进行收集时,在数据库中指定默认值并不是一件好事。选择另一种方式,如JPA事件来启动JAVA中的所有值。

艾敏学
2023-03-14

您可以尝试为列配置insertable属性,该属性不应持久化

来自文档-<代码>可插入:(可选)该列是否包含在持久性提供程序生成的SQL INSERT语句中

 类似资料:
  • 我会尽量短一点 异常在线程"main"javax.persistence.持久性异常:异常[Eclipse链接-4002](Eclipse持久性服务-2.5.2. v20140319-9ad6abd):org.eclipse.persistence.exceptions.数据库异常内部异常:java.sql.SQLExc0019:字段'Target_id'没有默认值错误代码: 1364调用:插入目

  • 我会尽量简短客观。我使用的是JPA Eclipselink2.5.2。在用MySQL脚本创建数据库之后,我正在尝试填充它。编译给了我以下错误: 线程“main”javax.Persistence.persistenceException:异常[EclipseLink-4002](Eclipse Persistence Services-2.5.2.V20140319-9AD6ABD):org.Ec

  • 问题内容: 我的桌子看起来像 然后我有一个触发器来自动填充CREATED_BY字段 当我使用插入 该条目在表中进行,但我仍然收到错误消息 有没有一种方法可以抑制此错误,而又不使字段可为空并且不删除触发器?否则,我的hibernate状态将看到这些异常(即使已进行插入),然后应用程序将崩溃。 问题答案: 设置默认值(例如:empty ),触发器将始终更新该值。

  • 我的桌子看起来像 然后我有一个触发器来自动填充CREATED_BY字段 当我使用 表中有条目,但我仍然得到错误消息 有没有一种方法可以在不使字段为空和不移除触发器的情况下抑制此错误?否则,我的hibernate将看到这些异常(即使已经进行了插入),然后应用程序将崩溃。

  • 问题内容: 我们有一个带有枚举字段-的实体,我们想使用JPA注释-为它设置默认值。 但是,当我们将实体保存到数据库时,此字段的值为和。对于布尔字段- 正确的默认值()已保存。 如果改为使用:,则会在保存时得到以下异常: 我们做错了什么?为什么它仅适用于布尔值? 问题答案: 当某些SQL代码在未为emailCommunicationStatus列指定任何值的情况下插入一行时,您所做的工作很有用。在这

  • 我正在开发一个基于spring boot的rest web服务,我使用lombok来生成getter和setter,但是当我调用我的web服务时,我得到了一个带有默认值null的对象,这是我的代码: 我的实体 : 这是我的Rest服务: 在我的配置文件中,我添加了以下行: 当我呼叫我的服务时,我得到以下响应: 如果我在我的类中添加了getters和setters,它就能正常工作,我会得到json的