当前位置: 首页 > 知识库问答 >
问题:

Spring Data JPA JPA是一个预测。save()不返回默认值

殷耀
2023-03-14

我有一个非常令人困惑的问题,就是占用了很多时间:

@Column(name = "created", columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP", insertable = false, updatable = false)
@Temporal(TemporalType.TIMESTAMP)
private Date created;

这段代码的时间戳是在my Postgres DB中设置的,但存储库返回一个created=null的实体;

我尝试过一些注释,比如:

@产生

来源:Spring Data JPA JPA Propository。保存(实体)不返回数据库默认值

但对我来说什么都不管用。

共有2个答案

郏正信
2023-03-14

使用Spring数据,我们在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您必须删除数据库默认值。您可以设置插入表=true并使用列变换器

    @Column(name = "created", updatable = false)
    @ColumnTransformer(write = "coalesce(sysutcdatetime(), ?)")
    @CreatedDate
    private LocalDateTime created;
何琨
2023-03-14

生成的值仅保证在刷新时生成。保存实体只会使其“附加”到持久性上下文。所以,要么你必须明确地刷新实体管理器。

尝试使用entity.saveAndFlush(),它应该可以工作。

 类似资料:
  • 我有一个相当简单的问题。在单个事务中,我的代码如下所示: 我的实体看起来像这样: 数据库是这样设置的(方言=Oracle 11G) 因此,基于持久化实体的代码,我想我会得到如下查询: ... 但是永远不会发生。为什么实体没有刷新? 这是因为

  • 问题内容: 我希望模仿允许用户指定“默认”返回值的内置函数(如)的行为。我最初的尝试是这样做 问题是,如果用户希望成为其返回值,则此函数将引发异常。第二次尝试: 这解决了上述问题,并允许用户指定任何任意值,但是带来了麻烦,因为用户必须始终在其函数调用中进行指定;他们不能只提供最后。同样,可以使用,但如果用户偏爱该语法,则会阻止用户使用。 结合并提供了可行的解决方案,但感觉这需要付出很多努力。它还可

  • 问题内容: 我的代码中有一个,如果地图的方法返回的是空列表而不是空值,则应避免使用空指针。java API中是否有类似的东西?我应该延长吗? 问题答案: @Jon的答案是直接处理您所要询问的好方法。 但是令我惊讶的是,您可能要实现的是“多图”;即从键到值集合的映射。如果是这种情况,那么您还应该查看Guava或Apache commons集合中的multimap类。 看着: 界面和它的实施方式中,或

  • 问题内容: 我有以下选择语句,以获取流的下一个预定项目。如果没有匹配的行,我希望它返回默认值。这是我正在使用的行: 那应该可以获取最近计划的项目,但如果它早于查询之前30分钟,则不会。但是,如果用户未安排任何时间,则我需要一个默认值,以便流中实际播放某些内容。我尝试了以下方法: 和: 但是,如果未找到任何行,它将始终返回空结果。我该如何返回默认值? 问题答案: 一种方法 由于只返回一行,因此可以使

  • MapStruct版本:1.4.1.Final 当我试图将一个整数映射到bean时,当整数为空时,目标仍然被创建为默认对象而不是空 生成的代码 编辑:与https://github.com/mapstruct/mapstruct/issues/1166#issuecomment-353742387

  • 我对以下代码有问题,我将其隔离为最封闭的形式,我正在使用Java8,它几乎准备好发布(2014年3月18日),所以我预计在实现本身不会有严重的问题,所以它可能/必须是我自己的代码: 注意:代码是用Java8编写的,它具有各种新特性,包括接口中的方法实现。 代码本身可能不是最有意义的,但那是因为我已经剥离了其他不相关方法的负载。 但是,当您观察输出时,您会看到一些奇怪的东西,在某个时刻,对于我个人来