【问题标题】:Data that changes over time in Hibernate在 Hibernate 中随时间变化的数据
【发布时间】:2017-07-13 18:25:10
【问题描述】:

我即将开始实现如下关系:

Entity one-to-many Configuration

Configuration 会随着时间的推移而演变,包括创建未来的Configurations,即configuration 表中的以下字段:

entityId
fromDate
toDate
configurationValue1
configurationValue2
...

fromDatetoDate 存储特定版本信息的活动日期。

configuration 表中的最后一个条目将有它的fromDate,以及一个非常遥远的toDate。在toDate 之前添加一个新的Configuration 将更新当前的最新配置,使其在新配置的fromDate 前一天有一个toDate,而新的ConfigurationtoDate 将是未来。

对于一个定义明确且经过测试的 DAO 来说,所有这一切似乎都是一个很好的案例,它能够检索所有 Configurations 以获取 Entity,当前的 Configuration 获取 Entity,并更新未来的 Configuration s(当然要确保日期不重叠),但在我开始实施它之前,Hibernate 中是否有任何可以帮助的东西,例如,可以让我这样做的代码? :

myEntity.getCurrentConfiguration() //perhaps a @Where that uses now() to find the correct Configuration?

我知道Hibernate Envers,但我认为这不一定是正确的用例。 Envers 似乎管理审计日志,透明地保留对实体所做更改的历史记录,而我希望能够管理实体的当前和未来值,当前值基于now()(但我确实需要能够保留所有旧条目)。

【问题讨论】:

  • 您可以为此使用 Hibernate 公式或数据库视图;见this answer。但是,两者都意味着每当您阅读Entitys 时都会执行EntityConfiguration 之间的连接,因此您可能只想在需要时执行附加查询来获取当前配置,而不是将其映射到@ 987654349@ 在所有。

标签: hibernate hibernate-envers


【解决方案1】:

绝对正确,Hibernate Envers 不符合您概述的要求。

但是,我建议您将关注点与您描述的日期业务逻辑与您的 DAO 类通常会公开的正常 CRUD 持久性操作分开。

这样,如果您稍后决定要以相同的方式存储该配置数据,而不是在 JPA 持久性数据存储中,而是在其他地方,您只需接触基于 persistence 代码在一个常见的公开界面上,您的日期操作逻辑保持不变。

【讨论】:

  • 感谢您验证这一点 - 您建议的方法正是我已经选择的方法:一个 Util 类,它能够操作必须实现特定方法的现有实体的 TreeSet。通过使用接口,我可以在任何地方使用该技术,Hibernate 会接受修改。
猜你喜欢
  • 2020-01-09
  • 2012-09-06
  • 1970-01-01
  • 2022-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-16
  • 1970-01-01
相关资源
最近更新 更多