Dan*_* R. 5 java postgresql spring hibernate jpa
我有一个很困惑的问题,那就是浪费很多时间:
@Column(name = "created", columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP", insertable = false, updatable = false)
@Temporal(TemporalType.TIMESTAMP)
private Date created;
Run Code Online (Sandbox Code Playgroud)
这段代码的时间戳是在我的Postgres DB中设置的,但是存储库返回的实体具有created = null;
我尝试了一些注释,例如:
@生成
来自: Spring Data JPA JpaRepository.save(entity)不返回数据库默认值
但是对我没有任何作用。
Hen*_*nry 10
使用 Spring Data 我们在 sql server 上遇到了同样的问题
我们解决了它使用
import org.hibernate.annotations.Generated;
import org.hibernate.annotations.GenerationTime;
@Generated(GenerationTime.INSERT)
@Column(name = "created", insertable = false, updatable = false)
private LocalDateTime created;
Run Code Online (Sandbox Code Playgroud)
您可以结合使用 saveAndFlush (来自 JpaRepository)
如果没有任何效果,您可以通过扩展 SimpleJpaRepository 来实现刷新方法,或者避免使用数据库默认值并将其替换为 EntityListener
@EnableJpaAuditing
public class ConfigClass {...}
@EntityListeners(AuditingEntityListener.class)
public class YourEntity {
@Column(name = "created", insertable = false, updatable = false)
@CreatedDate
private LocalDateTime created;
}
Run Code Online (Sandbox Code Playgroud)
考虑到使用 EntityListener 必须删除数据库默认值。您可以设置 insertable=true 并使用 ColumnTransformer
@Column(name = "created", updatable = false)
@ColumnTransformer(write = "coalesce(sysutcdatetime(), ?)")
@CreatedDate
private LocalDateTime created;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6400 次 |
| 最近记录: |