Spring Data JPA JpaRepository.save(entity) 不返回数据库默认值

2024-03-07

我有一个相当简单的问题。在单个事务中,我的代码如下所示:

MyClass c = new MyClass();
c.setPropA("A");

c = myClassRepository.save(c);

c.setPropC("C");

我的实体如下所示:

@Entity
@Table(name = "MY_CLASS")
public class MyClass {
  private String propA;
  private String propB;
  private String propC;

  @Id
  @Column(name = "PROP_A", unique = true, nullable = false, updatable = false)
  public String getPropA() { return propA; }
  public void   setPropA(String propA) { this.propA = propA; }

  @Column(name = "PROP_B", insertable = false)
  public String getPropB() { return propB; }
  public void   setPropB(String propB) { this.propB = propB; }

  @Column(name = "PROP_C")
  public String getPropC() { return propC; }
  public void   setPropC(String propC) { this.propC = propC; }
}

并且数据库是这样设置的(方言= Oracle 11G)

CREATE TABLE MY_CLASS {
  PROP_A VARCHAR2 NOT NULL PRIMARY KEY,
  PROP_B VARCHAR2 DEFAULT 'B' NOT NULL,
  PROP_C VARCHAR2
}

因此,根据持久化实体的代码,我认为我会得到如下所示的查询:

MyClass c = new MyClass();
c.setPropA("A");

c = myClassRepository.saveAndFlush(c);
// INSERT INTO MY_CLASS (PROP_A, PROP_C) VALUES ("A", NULL)
// SELECT PROP_A, PROP_B, PROP_C FROM MY_CLASS -- to refresh `c`

c.setPropC("C");

// After transaction ends, flush change to `c.propC`
// UPDATE MY_CLASS SET PROP_B = "B", PROP_C = "C" WHERE PROP_A = "A"

...但是SELECT永远不会发生。为什么实体不刷新?

这会中断,因为UPDATE(立即)遵循INSERT and c.propB还是null。我得到一个ORA-01407: cannot update ("MY_SCHEMA"."MY_CLASS"."PROP_B") to NULL堆栈跟踪。

我意识到有一些方法可以解决这个问题@PrePersist或设置默认值columnDefinition在 Java 中,但我不必重复默认值。

注意:这在我之前使用时有效org.hibernate.Session.saveOrUpdate()而不是 Spring Data JPA 来执行此操作。

预先感谢您的任何帮助!


Hibernate 不知道 B 是由数据库生成的,并且它必须在插入后读取它,除非您使用@Generated注解 http://docs.jboss.org/hibernate/orm/4.3/javadocs/org/hibernate/annotations/Generated.html.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring Data JPA JpaRepository.save(entity) 不返回数据库默认值 的相关文章

随机推荐

  • maven - 在构建时弹出请求许可的窗口

    我刚刚安装了 Maven 在构建 hello world 时 maven 不断向我请求许可 并显示以下消息 小程序正在尝试访问文件的 存在 状态属性 看起来这不是一个很常见的问题 有什么办法可以给maven授予这些权限吗 INFO Scan
  • Solr 中的 docValues 是什么?我什么时候应该使用它们?

    因此 我阅读了多个来源 试图解释 Solr 中的 docValues 是什么 但我似乎不明白何时应该使用它们 尤其是与索引字段和存储字段相关的时候 谁能解释一下吗 Solr 中的 docValues 是什么 Doc Values 可以解释为
  • 标题将包含的 div 从顶部向下推?

    我对 stackoverflow 和 Web 开发都是新手 尝试在没有任何帮助的情况下学习 我正在尝试创建一份简历 作为磨练我的技能的一部分 事情是这样的 我的包含 div 下的第一个 div 是带有 id 的 divheader 我已将包
  • Rails 中数字的本地化

    对新帖子感到抱歉 但我的第一个帖子关注的是阿拉伯 波斯数字 但问题似乎更大 我想知道是否有人做了一个 gem 来处理 ruby rails 中数字的本地化 I18n 官方语言环境 https github com svenfuchs rai
  • Pester:无法访问父作用域变量

    我在 Pester 中有以下简单的测试 Name Tests ps1 name foo Describe Check name It should have the correct value name Should Be foo 因此 当
  • R:解压缩多个文件,每个文件都在新的子目录中或重命名

    我设法调整一些代码来解压缩许多文件 但是解压时会出现同名文件 被替换 在我的工作目录中 我有 zip 文件 我在该目录中创建了一个名为 unzip 的新文件夹 我在其中解压缩了文件 dir create paste0 path unzip
  • 将 IEEE 754 浮点转换为 MIL-STD-1750A 浮点

    我正在尝试将 IEEE 754 32 位单精度浮点值 标准 c 浮点变量 转换为无符号长变量 格式为MIL STD 1750A http www xgc com manuals mil std 1750a 1 7 pdf 我在帖子底部包含了
  • 在 Grails 中将自定义 id 生成定义为默认值的最佳方法是什么?

    我想切换我的域类以使用可变长度的 UUID 作为其 id 我不想简单地在 URL 上显示连续的 id 供人们尝试和搞乱 我编写了一个自定义版本的 Java UUID 方法来允许可变长度 这样我就可以为不会变大的模型使用更短的 id 我发现这
  • 两个数组相加/求和

    我遇到了一个纯粹假设的问题 如果我找到正确的 linq 方法 感觉它有一个简单的解决方案 我有两个整数数组 我知道它们的大小相同 我想创建相同大小的第三个数组 其中第三个数组中的元素是相应位置的前两个数组中的元素之和 下面是一个应该显示我想
  • NetSuite / Suitescript - 为什么此验证字段脚本会进入无限循环?

    我的脚本进入无限循环 我不知道为什么 我在验证字段上运行此命令 并且如果存在具有相同参考号的另一个供应商帐单 则会阻止对该字段进行更改 从而强制用户将 参考号 更改为唯一 这是我的代码 function validateField type
  • 如何查看 C# 数组在内存中的分布情况?

    我想看看 C 数组是如何存放在计算机内存中的 我想看到的主要是两列 第一列是地址 第二列是数组元素 是否可以 我想从一维数组开始 但然后我想观察多维数组是如何放置的 Question 我如何通过 Visual Studio 看到它 您可以使
  • 运行时错误:事件循环正在运行

    当我调用该函数时出现以下错误send message Exception in thread Thread 1 Traceback most recent call last File usr lib python3 4 threading
  • Camel SFTP - 无法将目录更改为“/”

    我需要通过 SFTP 连接到服务器 但收到此错误 INFO org apache camel component file remote SftpOperations connect Connected to sftp myserver c
  • 从 Powershell 中的对象数组中删除项目

    我有一个数组对象 a 它返回如下所示的输出 通过执行 a 0 Name 我可以访问每个 Name 条目 a 0 Available 我可以访问其相应的可用空间 我有另一个数组 b 包含一些名称 例如 b 返回两个名称 sandeep agg
  • 解释 - 不涉及反射

    我有一个非常简单的问题 这不仅适用于 Spray json 而且我读过 argonaut 和 circe 的类似声明 所以请赐教 在 Spray json 中 我遇到这样的声明 There is no reflection involved
  • 如何在没有 ID 的情况下在 Prisma 中更新插入新记录?

    我正在使用 Prisma https www prisma io https www prisma io 作为 ORM 我想在存储数据时检查重复项 如果不存在 则创建一条新记录 我想我可以使用 Prisma 提供的 upsert 方法来做到
  • underscore.js 中的 chain 函数是否创建了一个 monad?

    In the chain文档 http underscorejs org chaining你发现 Calling chain在包装对象上将导致所有未来的方法调用 也返回包装的对象 当你完成后 计算 使用value检索最终值 也是如此chai
  • OpenAPI中如何定义全局参数?

    我正在准备我的 API 文档 方法是手工完成 而不是自动生成 我有应该发送到所有 API 的标头 但不知道是否可以为整个 API 全局定义参数 其中一些标头是静态的 有些必须在调用 API 时设置 但它们在所有 API 中都是相同的 我不想
  • 创建字典时使用语言模型文件

    我创建了一个语音到文本识别应用程序 为此 我使用 CMULanguage 工具开发了一本字典 为了为我的项目创建字典 我在组和文件中的语言文件夹中添加了两个文件 这些文件的扩展名是 lm 语言模型 和 dic 当我上传我的语料库时 CMUL
  • Spring Data JPA JpaRepository.save(entity) 不返回数据库默认值

    我有一个相当简单的问题 在单个事务中 我的代码如下所示 MyClass c new MyClass c setPropA A c myClassRepository save c c setPropC C 我的实体如下所示 Entity T