Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Update=false的实体中的Update字段返回具有新值字段的实体_Java_Jpa_Spring Data Jpa - Fatal编程技术网

Java Update=false的实体中的Update字段返回具有新值字段的实体

Java Update=false的实体中的Update字段返回具有新值字段的实体,java,jpa,spring-data-jpa,Java,Jpa,Spring Data Jpa,我使用的是spring数据jpa,我有一个实体,其代码如下: @Id @GeneratedValue @Column(columnDefinition = "uuid") private UUID id; @Basic(optional = false) @Column(updatable = false) private long creationTimestamp; ... 我使用org.springframework.data.jpa.repository.JpaRepository

我使用的是spring数据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方法(给定_id)搜索,返回的实体具有字段creationTimestamp=1,这是正确的,因为该列被定义为updateable=false


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

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

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

如何@Stefan said
@Column(updateable=false)
仅影响数据库层

如果我了解您正在尝试这样做,我建议Spring使用

@Id
@生成值
@列(columnDefinition=“uuid”)
私有UUID;
@基本(可选=假)
@CreationTimestamp
私有java.sql.Timestamp creationTimestamp;

使用此实现,您无需编写代码来设置此属性中的值。您只创建getter方法。

如何@Stefan说
@Column(updateable=false)
只影响数据库层

如果我了解您正在尝试这样做,我建议Spring使用

@Id
@生成值
@列(columnDefinition=“uuid”)
私有UUID;
@基本(可选=假)
@CreationTimestamp
私有java.sql.Timestamp creationTimestamp;

使用此实现,您无需编写代码来设置此属性中的值。您只能创建getter方法。

creationTimestamp是如何设置的?您能给出更新和保存实体的类代码吗?creationTimestamp是如何设置的?您能给出更新和保存实体的类代码吗?这是一个。这是一个。谢谢您的建议,但在我的例子中不适用,因为我使用的是一个从json解析到myEntity的控制器。即使这样,如果我得到pass creationTimestamp,返回的值也是错误的。你知道EntityManager会缓存记录吗?谢谢你的建议,但在我的例子中不适用,因为我使用的是一个从json解析到myEntity的控制器。即使这样,如果我得到pass creationTimestamp,返回的值也是错误的。你知道EntityManager会缓存记录吗?