繁体   English   中英

使用Hibernate进行内容比较以实现版本控制功能的最佳方法是什么?

[英]What is the best approach to implement a versioning feature with content comparison using Hibernate?

我正在使用基于JSF的Web应用程序,该应用程序具有支持bean和Hibernate的持久性。

目标是实现一种功能,以比较各个版本之间的更改,其中某些属性来自“外键”对象。 为了获得通用的解决方案,最好的方法是创建一种数据库触发器或类似的东西。

我知道@Version批注,但我不仅想拥有关于持久化对象的历史,而且也不想拥有有关的对象的历史。

有人已经做过类似的事情吗?

编辑:此处指定问题是更多详细信息。 该应用程序有很多业务对象,其中大多数只具有简单的文本属性,例如字符串。 应用程序要做的主要事情是CRUD。 我想构建一个功能,用户可以比较业务对象的旧版本。 我的第一个想法只是在业务对象的表中有一个version列,并始终使用新版本保存新的数据集。 但是对我来说,这似乎是一个很大的负担,可以保存所有重复的内容。 以及如何保持版本化对象之间的关联? 还有其他更轻巧的方法吗? 这种方法还意味着更改每个数据库访问类和保存方法。

我会解决这样的问题:

  • 业务对象表,例如: EXAMPLE_TABLE

     ----------------------------------- |ID |column 1|column 2|...| |---------------------------------- |1 |foo |bar |...| |2 |baz |test |...| |... |... |... |...| ----------------------------------- 
  • 每个业务对象表的历史记录保留表,例如: EXAMPLE_TABLE_HISTORY

     ------------------------------------------------ |ID |column 1|column 2|...|version|date| |----------------------------------------------- |1 |null |foo |...|1 | | |1 |baz |test |...|2 | | |... |... |... |...|... |... | ------------------------------------------------ 

您可以在每个操作(INSERT,UPDATE或DELETE)上为EXAMPLE_TABLE定义数据库触发,以将当前数据从EXAMPLE_TABLE复制到EXAMPLE_TABLE_HISTORY其中包括版本(列version )和时间戳(列date )以保存历史记录。

好处:

  • 您可以使用历史记录保存表中的ID列轻松检索业务对象的所有版本。
  • 使用触发器,您不必更改应用程序代码。

我想我找到了想要的东西。 事件虽然我想用数据库触发器来解决,但是休眠提供了一个很好的解决方案。 Hibernate envers为每个版本化/带注释的实体创建一个审核表。 您要做的就是在可审核的实体中设置注释。 将会生成所需的表,还将管理相关审计实体的历史记录。 因此,您可以重新创建实体的全部内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM