在Hibernate中随时间变化的数据

时间:2017-02-23 10:22:36

标签: hibernate hibernate-envers

我即将开始实施以下关系:

Entity one-to-many Configuration

但是Configuration会随着时间的推移而发展,包括创建未来的Configuration,这意味着configuration表中的以下字段:

entityId
fromDate
toDate
configurationValue1
configurationValue2
...

fromDatetoDate存储特定版本信息有效的日期。

configuration表中的最后一个条目将包含fromDate和一个非常遥远的toDate。在Configuration之前添加新toDate会更新当前最新配置,以便在新配置toDate前一天fromDate和新Configuration' s toDate将是未来的价值。

对于定义良好且经过测试的DAO而言,所有这些似乎都是一个很好的案例,它能够检索Configuration的所有EntityConfiguration的当前Entity ,并更新未来的Configuration(确保当然没有日期重叠),但在我实施之前,Hibernate中是否有任何内容可以提供帮助,例如,可以让我这样做的代码? :

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

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

1 个答案:

答案 0 :(得分:0)

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

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

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