2009-10-02 9 views
6

私はWebアプリケーションで作業しています。私たちはプロジェクトでORMとしてHibernateを使用しています。実際、私たちのアプリケーションは、ユーザーの選択に基づいていくつかのテーブルを動的に作成します。ユーザーは表名、列名を選択してから、CSVファイルからデータをインポートできます。だから私の質問は:動的に作成されたこのテーブルをHibernateオブジェクトとJavaオブジェクトにどのようにマップするかです。動的に作成されたテーブルをHibernateでどのようにマップするか?

答えて

10

それは、動的に行うことができますが、それは多少厄介です:

のSessionFactoryが構築される前に、動的にHibernateの設定オブジェクトを変更する必要があります。 Springを使用している場合、これはAnnotationSessionFactoryBeanpostProcessAnnotationConfiguration()メソッドをオーバーライドすることによって行うことができます。それ以外の場合は、buildSessionFactory()を呼び出す前にConfigurationオブジェクトを使用して行う必要があります。

アプリケーション再起動なしでこれを行う必要がある場合は、SessionFactoryを再構築するか(ユーザが完了するまで待つ必要があることを意味します)、カスタムクラス専用のSessionFactoryインスタンスを使用します。カスタムクラスが組み込みクラスを参照する必要がある場合は、不可能です)。

configuration.getMappings()でクラス/テーブルのマッピングにアクセスできます。 Table APIで新しいテーブルマッピングを作成し、addTable()経由で設定に追加する必要があります。同じことをクラスマッピングを表すPersistentClassで行う必要があります。複数のエンティティを表すために同じクラスを使用している場合(複数のテーブルをマップするなど)、それぞれに固有のエンティティ名を使用するようにしてください。すべてのアプリの再起動時にこれを行う必要があります(設定を変更する)。

2

どのくらいのテーブルが動的に作成されますか?テーブルは似ていて、データベース名を変更するだけですか?ビューへ http://www.experts-exchange.com/Programming/Languages/Java/J2EE/Frameworks/Spring/Q_24237099.html

あなたは完全に新しいテーブルを作成する場合は、ビューを使用することができ、そしてちょうど直接人:ここで

は、テーブル名を変更することについての議論のですか?

JDBCでクエリを動的に作成するのではなく、なぜこのためにHibernateを使用していますか?

+0

私は同意する、この問題のためにHibernateを使用することは間違っています。 – sbidwai

0

データベースソリューション - ビューを作成し、それを1つのテーブルまたは別のテーブルにポイントすることができます(構造が同一であると仮定します)。

あなたはネイティブSQL(DDL)を実行するために、あなたのアプリケーションが必要になりTABLE_B

SELECT * FROM としてVIEW HIBERNATE_NAME をCREATE TABLE_A

または SELECT * FROM としてVIEW HIBERNATE_NAME をCREATE、 しかし、このHibernateハックよりも簡単になるはずです

関連する問題