【发布时间】:2017-07-13 18:25:10
【问题描述】:
我即将开始实现如下关系:
Entity one-to-many Configuration
但Configuration 会随着时间的推移而演变,包括创建未来的Configurations,即configuration 表中的以下字段:
entityId
fromDate
toDate
configurationValue1
configurationValue2
...
fromDate 和toDate 存储特定版本信息的活动日期。
configuration 表中的最后一个条目将有它的fromDate,以及一个非常遥远的toDate。在toDate 之前添加一个新的Configuration 将更新当前的最新配置,使其在新配置的fromDate 前一天有一个toDate,而新的Configuration 的toDate 将是未来。
对于一个定义明确且经过测试的 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 时都会执行Entity和Configuration之间的连接,因此您可能只想在需要时执行附加查询来获取当前配置,而不是将其映射到@ 987654349@ 在所有。
标签: hibernate hibernate-envers