gpt4 book ai didi

java - 使用 Hibernate 实现具有内容比较的版本控制功能的最佳方法是什么?

转载 作者:行者123 更新时间:2023-12-01 11:29:51 26 4
gpt4 key购买 nike

我正在开发一个基于 JSF 的 Web 应用程序,并使用支持 bean 和 Hibernate 来实现持久性。

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

我了解 @Version 注释,但我不仅希望拥有有关持久对象的历史记录,还希望拥有关联对象的历史记录。

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

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

最佳答案

我会这样解决问题:

  • 业务对象表,示例: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 包括版本(列版本)和时间戳(列日期)以保存历史记录。

优点:

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

关于java - 使用 Hibernate 实现具有内容比较的版本控制功能的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30508656/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com