持久化后,JPA实体CreateTimestamp为null

时间:2017-09-14 19:29:39

标签: java hibernate jpa

我有一个名为createTimestamp的实体。这是由数据库在插入时创建的。 getter看起来像这样:

@Column(name = "create_timestamp", columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP", insertable = false)
public ZonedDateTime getCreateTimestamp() {
    return createTimestamp;
}

但是,当我的服务调用dao(spring存储库)来创建实体时,创建时间戳为null。

我的dao创建方法:

@Override
public int insert(AntennaSpec antennaSpec) {
    super.save(antennaSpec);
    logger.info("Antenna Spec " + antennaSpec.getAntennaCode() + " created");
    return antennaSpec.getAntennaSpecId();
}

我的REST资源类通过调用create方法调用服务来创建实体。该方法返回新创建的实体的id。在资源中,我然后调用我的服务返回传递id的实体,但创建时间戳为null。我已经做了什么让这个填充是在我的资源,我已分离实体,然后再次获取实体。这有效,但我不想将detach暴露给我的服务或资源类。

任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:1)

这是春天创建时间戳的另一种方式:

@CreationTimestamp
@Column(name = "create_timestamp")
private Date createTimestamp;

答案 1 :(得分:0)

看起来您可能希望将注释@Temporal(TemporalType.TIMESTAMP)添加到列中,如给出的答案here中所述。

查看here,了解有关持久性,保存,更新,合并和saveOrUpdate如何针对不同对象状态执行不同的其他信息。

答案 2 :(得分:0)

如果让hibernate生成数据库,

columnDefinition只会产生影响;否则它会被忽略。只需通过数据库迁移工具将列更改为所需的状态。

  

columnDefinition

     

(可选)为生成DDL时使用的SQL片段   专栏。   JPA JavaDoc

答案 3 :(得分:0)

这是另一种解决方案... !!!

@CreationTimestamp
private LocalDateTime createTime;


@UpdateTimestamp
private LocalDateTime updateTime;

别忘了使用.. !!

@EntityListeners(AuditingEntityListener.class)

像这样使用-

It is just Entity