我们正在开发您的bog标准Java应用程序,并且我们正在创建的许多记录(MySQL中的Hibernate实体)都有“创建”和“修改”的时间戳。
现在,我和其中一位开发人员不同意-我认为这两个字段的MySQL默认值都应该是CURRENT_TIMESTAMP,然后应用程序可以更改修改后的字段。他希望两者都由应用程序管理。
这两个决定都有令人信服的理由吗?我不明白您为什么要向代码中添加更明确的步骤,除非出于某种原因,您担心您的服务器(db、应用程序)具有不一致的时间戳。
发布于 2010-01-25 16:10:15
如果您可以牺牲可移植性,
如果这些论点都不适用,请使用对您更容易的(或更多开发人员投票支持的)
如果您选择应用程序处理,请使用Pascal Thivent对@PreUpdate
的建议,或者使用默认值设置您的字段,例如:
private Calendar date = Calendar.getInstance();
发布于 2010-01-25 16:32:06
我会在代码中处理这个问题,并使用Hibernate/JPA的@PrePersist和@PreUpdate回调函数:
@PreUpdate
@PrePersist
public void setTimeStamps() {
modified = new Date();
if (created==null) {
created = new Date();
}
}
主要原因:可移植性(例如,这将与另一个数据库一起工作,例如在测试上下文中,没有任何数据库魔力,没有DEFAULT
,没有触发器,什么都没有)。
发布于 2010-01-25 16:03:20
为了保持一致性,在同一层中分配所有时间戳是有意义的。
这个指向相关问题的answer提供了一个很好的示例,说明如何在Hibernate中做到这一点。
https://stackoverflow.com/questions/2130896
复制相似问题