Java 如何检索jpa实体上默认当前时间戳指定的最新(当前)时间值';谁的财产?

Java 如何检索jpa实体上默认当前时间戳指定的最新(当前)时间值';谁的财产?,java,hibernate,jpa,spring-data-jpa,spring-data,Java,Hibernate,Jpa,Spring Data Jpa,Spring Data,我有一个JPA实体,它包含两列,即createdTime和modifiedTime。我想使用MySQL的DEFAULT CURRENT\u TIMESTAMP功能为这两列生成适当的时间值,因此我编写了如下实体类: @实体 公共类博客{ // ... @时态(TemporalType.TIMESTAMP) @列(name=“created_time”,updateable=false,insertable=false,nullable=false, columnDefinition=“日期时间默认

我有一个JPA实体,它包含两列,即
createdTime
modifiedTime
。我想使用MySQL的
DEFAULT CURRENT\u TIMESTAMP
功能为这两列生成适当的时间值,因此我编写了如下实体类:

@实体
公共类博客{
// ...
@时态(TemporalType.TIMESTAMP)
@列(name=“created_time”,updateable=false,insertable=false,nullable=false,
columnDefinition=“日期时间默认当前时间戳”)
私有日期创建时间;
@时态(TemporalType.TIMESTAMP)
@列(name=“modified_time”,updateable=false,insertable=false,nullable=false,
columnDefinition=“更新当前时间戳时的日期时间默认当前时间戳”)
私人日期修改时间;
}
然后我在我的应用程序上做了一些实验,当我检查数据库时,数据库中这两列的值被正确更新

但是,当我通过
blogreepository::save
检查java实体返回时,这两列的值不是最新的值。例如,当我插入一个新的
Blog
实体时,我在
BlogRepository::save
返回值上的这两个属性得到null

我读过一些帖子,比如,如果我将该列标记为
updateable=false
,就会发生这种情况。那么我该如何解决这个问题呢?只需删除
updateable=false
/
insertable=false
似乎没有帮助,但会触发列的NOTNULL约束冲突。但是如果我删除这两列上的NOTNULL约束,这两列的值就是null。

在这种情况下,您应该使用注释

2.3.18。生成属性

生成的属性是由数据库生成其值的属性。通常,Hibernate应用程序需要刷新包含数据库正在为其生成值的任何属性的对象但是,将属性标记为已生成可以让应用程序将此职责委托给Hibernate。当Hibernate为已定义生成属性的实体发出SQL INSERT或UPDATE时,它会立即发出select以检索生成的值

因此,您应该更正映射,如下所示:

@Temporal(TemporalType.TIMESTAMP)
@已生成(值=GenerationTime.INSERT)
@列(name=“created_time”,updateable=false,insertable=false,nullable=false,
columnDefinition=“日期时间默认当前时间戳”)
私有日期创建时间;
@时态(TemporalType.TIMESTAMP)
@已生成(值=生成时间。始终)
@列(name=“modified_time”,updateable=false,insertable=false,nullable=false,
columnDefinition=“更新当前时间戳时的日期时间默认当前时间戳”)
私人日期修改时间;

这可能会导致性能问题吗?因为“当Hibernate为已定义生成属性的实体发出SQL INSERT或UPDATE时,它会立即发出select以检索生成的值”。理论上是的,但如果不针对特定用例进行度量,就很难确定某件事。