0

我有两个表 chart 和 chartHistory 具有相似的表结构

chart_id   NUMERIC(9,0)
chart_ref_id  NUMERIC(9,0) NOT NULL
chart_property VARCHAR2(20) NOT NULL
chart_value  VARCHAR2(100)

当我们获得图表参考 id 的新属性/值对时,图表中的条目需要存储到 chartHistory 表中。

我打算通过以下方式使用 Hibernate 来实现它

使用 chartReferenceId 从 CHART 表中获取值列表

List<Chart>  chartList =  chartDao.findChartByVisitRef(chartReferenceId); 

(命名查询:findChartByRef = from Chart chart where chart.chartReferenceId=:chartReferenceId)

使用检索到的列表并使用来自 chartList 的值构建一个 chartHistoryList 并调用 Hibernate 方法 saveAll

chartHistoryDao.saveAll(chartHistoryList);

保存后,从 CHART 表中删除现有条目。

chartDao.deleteAll(chartList);

为收到的新条目构建一个 newChartList,并执行休眠 saveAll

chartDao.saveAll(newChartList);

如您所见,这执行了四个查询,即。用于检索旧记录,将它们保存到存档表中,删除旧条目并插入新值。

我想知道是否有更好的方法来实现这一点?我猜有些东西插入 .. (select from...) 会更有效?请指教。

4

1 回答 1

3

试试 Hibernate 的 envers/audit 模块,它会自动为您处理所有这些。

envers/audit 现在的主要问题是查找文档。Envers(原始模块)应该从 3.5 开始与 Hibernate 代码合并,但核心文档没有提到任何关于版本控制或审计的内容,尽管 InfoQ 坚持“ Hibernate 4.1 Released With Improvement Auditing Support

因此,请尝试从过时的envers页面链接的过时文档,并希望获得最好的结果。

免责声明:我多年来没有使用过 Hibernate 或 envers。

于 2013-01-07T10:25:08.017 回答