我有两个表格图表和图表历史记录具有相似的表格结构
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);
正如您所看到的,这会执行四个查询,即。用于检索旧记录,将它们保存到存档表中,删除旧条目并插入新值。
我想知道是否有更好的方法来实现它?插入某些东西......(从...中选择)会更有效率吗?请指教。
答案 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。