[英]Update field in an entity with updatable=false returns the entity with the field with the new value
我正在使用 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 ,这是正确的,因为该列被定义为updatable=false 。
问题是,为什么当我更新时,方法save(entity)返回creationTimestamp 中的新值而不是数据库中的值? 因为我期望“保存的实体”(如 javadoc 所说)。
此选项不会使属性写保护。 这意味着发送到数据库的 UPDATE 语句应排除该字段。
@Stefan 如何说@Column(updatable = false)
updatable @Column(updatable = false)
只影响数据库层
如果我理解您正在尝试这样做,我建议 Spring 管理此列
@Id
@GeneratedValue
@Column(columnDefinition = "uuid")
private UUID id;
@Basic(optional = false)
@CreationTimestamp
private java.sql.Timestamp creationTimestamp;
使用此实现,您无需编写代码即可在此属性中设置值。 您只需创建 getter 方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.