首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用由时间戳创建的时间戳,让DB管理它更好,还是让应用程序管理它更好?

使用由时间戳创建的时间戳,让DB管理它更好,还是让应用程序管理它更好?
EN

Stack Overflow用户
提问于 2010-01-25 15:55:37
回答 4查看 896关注 0票数 8

我们正在开发您的bog标准Java应用程序,并且我们正在创建的许多记录(MySQL中的Hibernate实体)都有“创建”和“修改”的时间戳。

现在,我和其中一位开发人员不同意-我认为这两个字段的MySQL默认值都应该是CURRENT_TIMESTAMP,然后应用程序可以更改修改后的字段。他希望两者都由应用程序管理。

这两个决定都有令人信服的理由吗?我不明白您为什么要向代码中添加更明确的步骤,除非出于某种原因,您担心您的服务器(db、应用程序)具有不一致的时间戳。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-01-25 16:10:15

如果您可以牺牲可移植性,

  • 将使用DB时间戳。此外,如果非常小的差异对应用程序很重要,并且您将有多个应用程序服务器/群集,则在同步节点时可能会出现问题。
  • 使用应用程序生成时间戳,以防它不确定所选数据库是否会保留,或者如果您使用多个数据库-例如,用于生产的MySQL,用于单元测试的HSQLDB。

如果这些论点都不适用,请使用对您更容易的(或更多开发人员投票支持的)

如果您选择应用程序处理,请使用Pascal Thivent对@PreUpdate的建议,或者使用默认值设置您的字段,例如:

代码语言:javascript
运行
复制
private Calendar date = Calendar.getInstance();
票数 7
EN

Stack Overflow用户

发布于 2010-01-25 16:32:06

我会在代码中处理这个问题,并使用Hibernate/JPA的@PrePersist@PreUpdate回调函数:

代码语言:javascript
运行
复制
@PreUpdate
@PrePersist
public void setTimeStamps() {
    modified = new Date();
    if (created==null) {
      created = new Date();
    }
}

主要原因:可移植性(例如,这将与另一个数据库一起工作,例如在测试上下文中,没有任何数据库魔力,没有DEFAULT,没有触发器,什么都没有)。

票数 4
EN

Stack Overflow用户

发布于 2010-01-25 16:03:20

为了保持一致性,在同一层中分配所有时间戳是有意义的。

这个指向相关问题的answer提供了一个很好的示例,说明如何在Hibernate中做到这一点。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2130896

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档