java - 使用 updatetable=false 更新实体中的字段会返回具有新值字段的实体

标签 java jpa spring-data-jpa

我正在使用 spring-data-jpa 并且我有一个具有以下代码的实体:

@Id
@GeneratedValue
@Column(columnDefinition = "uuid")
private UUID id;

@Basic(optional = false)
@Column(updatable = false)
private long creationTimestamp;
... 

我使用 org.springframework.data.jpa.repository.JpaRepository 来执行相关的 CRUD 操作。

当我第一次保存实体(例如creationTimestamp=1)时,方法save(entity)返回保存的实体(如javadoc所说)以及新的id用于进一步操作(如 javadoc 所说)并使用字段 creationTimestamp=1

但是稍后,如果我尝试使用新的creationTimestamp(例如creationTimestamp=2)更新此实体,再次使用方法save(entity),此方法返回具有字段 creationTimestamp=2 的实体(这是不正确的)。

如果我使用方法 findById(given_id) 进行搜索,返回的实体具有字段 creationTimestamp=1,这是正确的,因为该列被定义为 updateable=false

问题是,为什么当我更新时,方法save(entity)返回creationTimestamp中的新值,而不是数据库中的值?因为我期望“保存的实体”(就像 javadoc 所说)。

最佳答案

此选项不会使属性写保护。这意味着发送到数据库的UPDATE语句应排除该字段。

关于java - 使用 updatetable=false 更新实体中的字段会返回具有新值字段的实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60172212/

相关文章:

java - 在抛出异常之前在 Catch 子句中调用时,JPA 存储库不执行更新

java - 将身份服务器 5.1.0 配置为 LDAP 服务器并测试连接的最佳方法

java - 在 java/spring-boot 中,如果找不到项目,返回空 json 对象的最干净方法是什么

java - 人们选择 Java 而不是桌面应用程序的其他技术的原因是什么?特别是 GUI

java - 如何使用 JPA 创建 UNIQUE 列?

java - Entitymanager 为 null spring JPA 配置

java - Spring Data JPA 查询无法在 MsSQL Server 上运行

java - 从具有主组合键的关联表中删除

java - 获取 SwingWorker doInBackground() 上变量的值

java - 为 ListView 设置背景图像