使用Hibernate归档数据的最佳方法

时间:2013-01-07 10:17:07

标签: java sql spring hibernate archive

我有两个表格图表和图表历史记录具有相似的表格结构

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 =来自图表图表,其中chart.chartReferenceId =:chartReferenceId)

使用检索到的列表并使用chartList中的值构建chartHistoryList并调用Hibernate方法saveAll

chartHistoryDao.saveAll(chartHistoryList);

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

chartDao.deleteAll(chartList);

为新委托的收件人建一个newChartList,然后做一个hibernate saveAll

chartDao.saveAll(newChartList);

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

我想知道是否有更好的方法来实现它?插入某些东西......(从...中选择)会更有效率吗?请指教。

1 个答案:

答案 0 :(得分:2)

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

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

请尝试从过时的envers页面链接过时的文档,并希望获得最佳效果。

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

相关问题