0

私は2つのテーブルチャートと同様のテーブル構造を持つ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);

ご覧のとおり、これは4つのクエリを実行します。古いレコードを取得し、それらをアーカイブテーブルに保存し、古いエントリを削除し、新しい値を挿入します。

これを実装するためのより良い方法があるかどうか知りたいですか?..(...から選択)に挿入する種類の何かがより効率的だと思いますか?ご意見をお聞かせください。

4

1 に答える 1

3

これらすべてを自動的に処理するHibernateのenvers/auditモジュールを試してください。

現在のenvers/auditの主な問題は、ドキュメントを見つけることです。Envers(元のモジュール)は3.5以降Hibernateコードとマージされることになっていますが、InfoQが「監査サポートが改善されてリリースされたHibernate 4.1」と主張していても、コアドキュメントはバージョン管理や監査については何も記載されていません。

したがって、廃止されたenversページからリンクされている古いドキュメントを試して、最高のものを期待してください。

免責事項:私は何年もHibernateまたはenversを使用していません。

于 2013-01-07T10:25:08.017 に答える