2011-08-23 8 views
1

選択に応じて、ブックのさまざまな翻訳を表示するプログラムを作成しています。 DB内に同じ列のテーブルが3つあり、英語、フランス語、ドイツ語があるとします。それから私はPOJOを持っています、例えばBook.javaと言います。同じスキーマを持つ複数のテーブルを、休止状態の同じPOJOにマップする

ここで、同じクラスを使用して、ユーザーの選択に基づいて特定のテーブルをクエリする方法を教えてください。 @table(name = "...")の値を動的に変更できますか?それも可能ですか?私はしばらくの間、jdbcを使用していますが、これは私の最初の休止状態のプロジェクトになります。

答えて

5

@MappedSuperclassでアノテーションされた基本クラスにすべてのフィールドとメソッドを格納し、それぞれが異なる@Table注釈値を持つ3つの異なるサブクラスを持つことができます。

しかし、私にとっては正規化問題のようです。同じ列を3つ持つテーブルがある場合、language列のテーブルを1つ使用しないのはなぜですか?

+0

はあなたが正常化する必要があり、合意しました。サイズが問題になる場合は、言語に基づいてテーブルを断片化/分割します。別のテーブル(または別々の列)を持っていれば、それぞれの言語のためにあなたがトリップになります。テーブル構造が変わるとどうなりますか? –

+0

ありがとう、私はDBを変更することはできません、私はまた、階層を探していませんでした。私はhbm.xmlのentity-name属性を使用して終了しました。今では、すべての種類の翻訳に1つのクラスしか使用できません。 – Rizwan

1

クラス階層を設計する必要があります。最上位クラスBookFrench、BookGerman、BookEnglish beeingサブクラスを使用するブッククラス。次に、あなたは、そのために、MappedSuperClassが最も興味深いものであると推測して、ハイバーネーション継承モデルの1つを使用する必要があります。次に、異なるクラスを持ちますが、すべてのインスタンスはPojosを予約し、各サブクラスはDB内に独自のテーブルを持ちます。

よろしく、 ステファン

関連する問題