2

異なるテーブルにデータがありますが、同じデータベースにあり、それらはすべて同じスキーマを持っています。いくつかのランタイム変数に応じて、Hibernate を照会するときに使用するテーブルを選択したいと考えています。これは可能ですか?

Hibernate のみを使用して、テーブル データをオブジェクトに読み取ることに注意してください。

解決策 (私が思うに) は、*.hbm.xmlテーブルごとに 1 つのファイルと、テーブルごとに 1 つの SessionFactory です。

ClassTable1.hbm.xml: <class name="Class" table="table1">...</class>
ClassTable2.hbm.xml: <class name="Class" table="table2">...</class>
ClassTable3.hbm.xml: <class name="Class" table="table3">...</class>

HibernateUtil.java:
    getSessionFactoryTable1() {...} // load mapping ClassTable1.hbm.xml
    getSessionFactoryTable2() {...} // load mapping ClassTable2.hbm.xml
    getSessionFactoryTable3() {...} // load mapping ClassTable3.hbm.xml

醜い。特に、ファイル間の唯一の違い*hbm.xmlはテーブル属性であることを考慮してください。

これを行うためのより洗練された方法はありますか?理想的には1 つ Class.hbm.xml

4

2 に答える 2

2

hbm.xml ファイルでクラスを定義する代わりに、注釈を使用できますか? すべての列マッピングを定義する基本クラスを記述し (変更しないと言ったため)、「table1」、「table2」、「table3」シナリオごとに 1 回拡張することができる場合があります。子クラスには、そのクラスの正しいテーブルを指す別の注釈があります。うまくいくかもしれません。

于 2010-07-20T18:40:18.440 に答える
2

いくつかのランタイム変数に応じて、Hibernate を照会するときに使用するテーブルを選択したいと考えています。

この種の質問をしている場合、これは、Hibernate がユース ケースに最適なツールではない可能性があることを示しています。

簡単な解決策として、HibernateUtil.getSessionFactory() メソッドの Configuration でどの hbm.xml ファイルを使用するかをプログラムで制御しないのはなぜですか? Hibernate Configuration オブジェクトは、プログラムで構成できます

于 2010-07-20T18:40:48.497 に答える