![](/img/trans.png)
[英]Spring Data JPA JpaRepository.save(entity) not returning database default values
[英]Spring Data JPA JpaRepository.save() does not return default values
我有一个非常混乱的问题,偷了很多时间:
@Column(name = "created", columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP", insertable = false, updatable = false)
@Temporal(TemporalType.TIMESTAMP)
private Date created;
这段代码的时间戳是在我的Postgres DB中设置的,但是存储库返回一个创建了= null的实体;
我尝试了一些注释,如:
@Generated
来自: Spring Data JPA JpaRepository.save(实体)不返回数据库默认值
但没有什么对我有用。
生成的值仅保证在刷新时生成。 保存实体只会使其“附加”到持久性上下文。 所以,要么必须明确地刷新实体管理器。
尝试使用entity.saveAndFlush()
,它应该工作。
使用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;
你可以把它结合起来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;
}
考虑到使用EntityListener您必须删除数据库默认值。 您可以设置insertable = true并使用ColumnTransformer
@Column(name = "created", updatable = false)
@ColumnTransformer(write = "coalesce(sysutcdatetime(), ?)")
@CreatedDate
private LocalDateTime created;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.