我们正在开发您的沼泽标准 Java 应用程序,并且我们正在创建的许多记录(MySQL 中的 Hibernate 实体)都具有“创建”和“修改”时间戳。
现在,我和一位开发人员不同意 - 我相信这两个字段都应该有 MySQL 默认值 CURRENT_TIMESTAMP,然后应用程序可以更改修改的值。他希望两者都由应用程序管理。
这两个决定是否有令人信服的理由?我不明白为什么你想在代码中添加更明确的步骤,除非出于某种原因你担心你的服务器(数据库,应用程序)具有不一致的时间戳。
如果这些参数都不适用,请使用对您来说更容易的参数(或更多开发人员投票支持的参数)。
如果您要进行应用程序处理,请使用
@PreUpdate
寻求 Pascal Thivent 的建议,或者为您的字段设置默认值,例如:
private Calendar date = Calendar.getInstance();
我会从代码中处理这个问题并使用 Hibernate/JPA 的 @PrePersist 和 @PreUpdate 回调:
@PreUpdate
@PrePersist
public void setTimeStamps() {
modified = new Date();
if (created==null) {
created = new Date();
}
}
主要原因:可移植性(即这将与另一个数据库一起使用,例如在测试环境中,没有任何数据库魔法,没有
DEFAULT
,没有触发器,什么都没有)。
为了一致性,将所有时间戳分配在同一层中是有意义的。
相关问题的answer给出了如何在 Hibernate 中执行此操作的一个很好的示例。
我会使用触发器和存储过程来维护这些字段。所以把逻辑放在数据库中。