如何在 Spring Data JDBC 中插入默认值

Posted

技术标签:

【中文标题】如何在 Spring Data JDBC 中插入默认值【英文标题】:How do you insert with default value in spring data JDBC 【发布时间】:2021-02-02 08:54:47 【问题描述】:

CrudRepository#save 不允许您使用默认列。实体的空字段被解释为NULL 而不是DEFAULT

如果我使用自定义@Query("INSERT INTO ... DEFAULT ..."),那么I'm unable to obtain the ID of the inserted row.

【问题讨论】:

你不能在 Bean 本身上设置默认值吗? 我认为很多人会喜欢更多的代码。 @Jay 这是我对 JenSchauder 说的话:my reason for not using save is it doesn't seem to support default columns values. Perhaps I could specify the column default in a column definition (like you can with JPA) but this isn't ideal, as now the column definition is duplicated - in the code and in the actual database schema; i.e. if I change the DB schema I must remember to change the code column definition。你的回答是我试图避免的 【参考方案1】:

目前没有使用数据库中的默认值的构建方式。

虽然@Jay 的回答并非针对 Spring Data JDBC,但在构造函数中将属性设置为其默认值的方法确实适用于 Spring Data JDBC。

替代方法是实现一个自定义方法,该方法执行插入并从数据库中检索默认值。

AFAIK 并非所有数据库都支持一次插入的多个返回值,因此您可能必须实际重新选择写入数据库的数据。

【讨论】:

我只是想检索 ID;即:INSERT INTO table (id, field, field_with_default, ...) VALUES (DEFAULT, :value, DEFAULT, ...),获取生成的id。 (实际上这个查询将被缩写为INSERT INTO table (field, ...) VALUES (:value, ...) 我认为DATAJDBC-618 会是一个很好的补充(spring data jpa 已经支持该功能),可以解决这个问题。

以上是关于如何在 Spring Data JDBC 中插入默认值的主要内容,如果未能解决你的问题,请参考以下文章

Spring Data JPA saveAll 不进行批量插入

Spring Data JDBC - 如何使用自定义 ID 生成

如何使用带有 Spring JDBC 的 MERGE 语句插入/更新单个记录

如何使用 Spring JDBC Framework 将“null”时间戳插入 DB2 数据库

spring-jdbc vs spring-data-jdbc,它们支持啥

Spring JDBC 与 JDBC