我正在使用 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/