在查看对象期间,时间戳将丢失 - >实体转换

时间:2016-09-08 19:05:30

标签: java database spring hibernate backend

我的应用程序使用视图对象 - 实体对进行前端 - 后端交互。前端仅使用VO,而后端仅与实体进行数据库对话。并且存在VO< - >。实体转换

我的实体类有2个时间戳属性,createTimestamp和lastUpdateTimestamp,对应于其数据表中的两个不可为空的列。但是VO从来没有这两个属性。

我当前的问题:由于VO不包含Timestamp属性,从VO转换的实体将具有2个Timestamp属性为null,当我执行该实体更新时,数据库发生错误,因为它认为我我试图将Timestamp列设置为null,这是不允许的。

我想知道我们如何处理这个问题。有没有办法让数据库在更新时加入这2个时间戳,或者在更新实体之前是否有一种“优雅”的方式来获取时间戳值?我经常需要一次更新实体列表。

我发现的解决方案 我在@Column注释下添加了一个属性“updatable”,它似乎解决了我的问题。 即@Column(name =“CREATE_STAMP”,nullable = false,updatable = false)

从这篇文章暗示 Creation timestamp and last update timestamp with Hibernate and MySQL

1 个答案:

答案 0 :(得分:0)

为timestamp列的DB列设置默认值,这意味着如果在INSERT查询中提供(通过VO)它将采用它,否则它将是默认值。

更新:您可以使用Hibernate拦截器,它们的用途是什么。例如,需要此类字段的实体可以实现以下接口:

public interface Auditable {
    Date getCreated();
    void setCreated(Date created);
    Date getModified();
    void setModified(Date modified);
}

然后拦截器总是在保存时设置修改后的字段,并且只在尚未设置的情况下设置创建的字段。