繁体   English   中英

Spring Data JPA JpaRepository.save()不返回默认值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM