【发布时间】:2020-02-11 15:23:07
【问题描述】:
我正在使用 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,这是正确的,因为该列被定义为 可更新=假。
问题是,为什么当我更新时,save(entity) 方法返回的是 creationTimestamp 中的新值,而不是数据库中的新值?因为我期望“保存的实体”(就像 javadoc 说的那样)。
【问题讨论】:
-
creationTimestamp是如何设置的?
-
能否给出更新和保存实体的类代码?
标签: java jpa spring-data-jpa