我有一个名为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
暴露给我的服务或资源类。
任何帮助将不胜感激。
答案 0 :(得分:1)
这是春天创建时间戳的另一种方式:
@CreationTimestamp
@Column(name = "create_timestamp")
private Date createTimestamp;
答案 1 :(得分:0)
看起来您可能希望将注释@Temporal(TemporalType.TIMESTAMP)
添加到列中,如给出的答案here中所述。
查看here,了解有关持久性,保存,更新,合并和saveOrUpdate如何针对不同对象状态执行不同的其他信息。
答案 2 :(得分:0)
columnDefinition
只会产生影响;否则它会被忽略。只需通过数据库迁移工具将列更改为所需的状态。
columnDefinition
(可选)为生成DDL时使用的SQL片段 专栏。 JPA JavaDoc
答案 3 :(得分:0)
这是另一种解决方案... !!!
@CreationTimestamp
private LocalDateTime createTime;
@UpdateTimestamp
private LocalDateTime updateTime;
别忘了使用.. !!
“ @EntityListeners(AuditingEntityListener.class)”
像这样使用-