2010-12-13 6 views
2

私たちは現在、このプロジェクトのために内部的にOracle 10gを使用していますが、それは変更される可能性は低いですが、最終的にはこのアプリケーションを他の顧客に提供する予定で、代わりの無料DBを提案できる必要があります。HibernateアプリケーションをDB非依存にするには?

Hibernate永続性レイヤを、使用される基盤となるRDBMSから独立させる最も良い方法は何ですか?理想的には、JDBC URLと使用されている方言を変更するだけで、少なくともOracle 10gとMySQLまたはPostgreSQL間を切り替えることができます。

主な問題は、ID生成戦略にあります。私たちは現在、私たちのIDにシーケンスベースのジェネレータを使用しています。テーブルごとに1つのシーケンスがあります。明白な動きは、「ネイティブ」戦略に切り替えるようです。しかし、それはすべてのテーブルのための1つのユニークなシーケンスでしょうか? Oracle上で動作する本番システムの既存のデータはどうなりますか?移行する方法は?トラップとは何ですか?

1つのRDBMS /ダイアレクトから別のRDBMS /ダイアレクトに切り替える際に注意すべきことは何ですか?

答えて

3

私はhilo IDジェネレータがすべてのデータベースで移植可能だと思います。 しかし、「ネイティブ」を選択した場合は、データベースのデータを移行する際に問題が発生します。新しいデータベースで最初からやり直し、オブジェクトを作成してHibernateを使用して初期スキームのデータを保存する方が良いでしょう。つまり、データベースのダンプ/バックアップのいずれかから復元してトランザクション行を削除することで、スキーマを初期化する必要はありません。

+0

ありがとうございました。しかし、新しく生成されたIDと重複することなく、既存のデータ(既存のIDとFKなどを含む)をどのように移行できると思いますか? –

+0

まず、すべてのテーブルで最大の既存のIDを見つけなければなりません。次に、max_lo(hiloジェネレータのパラメータ)に使用する値を決定します。たとえば、値max_lo = 100で既存の最大IDが23456の場合、hi_valueテーブルのnext_valueフィールドを235に更新し、次のIDが23500から開始するようにします。 – YudhiWidyatama

関連する問題