2012-02-02 9 views
2

同じ構造を持つtable1、table2、tablenのようないくつかのOracleテーブルがあります。 アプリケーションを実行する前に知っていれば、同じクラス名で、テーブル名と関連するエンティティ名(プロパティタグのマッピングを複製する)を持つ<class>タグを同じクラス名に入れることができます。 コンパイル時にすべてのテーブル名がわからない。アプリケーションが実行されるとき、私は持っているテーブルの数を知っています:クエリ時にテーブル名を設定することは可能ですか? 私のテーブルはすべてプレフィックス(テーブル)と接尾辞(1,2,3、n)のようなものですが、実行時にn-limitを知っています。 私はすべてのテーブルを照会してマップを生成する必要があります。ここで同じJavaクラスに動的名を持つ別のテーブルをマップします

私は、について説明が明確であったことはよく分からない私のBucket.hbm.xml

の例:

私はこのBucket.hbm.xml

<hibernate-mapping> 
    <class name="com.Bucket" table="BUCKETTABLE1" entity-name="Buckettable1"> 
     <cache usage="read-only"/> 
     <id name="id" type="long"> 
      <column name="ID" /> 
      <generator class="assigned" /> 
     </id> 
     <property name="name" type="java.lang.String"> 
      <column name="NAME" /> 
     </property> 
     <property name="value" type="java.lang.String"> 
      <column name="VALUE" /> 
     </property> 
    </class> 
    <class name="com.Bucket" table="BUCKETTABLE2" entity-name="Buckettable2"> 
     <cache usage="read-only"/> 
     <id name="id" type="long"> 
      <column name="ID" /> 
      <generator class="assigned" /> 
     </id> 
     <property name="name" type="java.lang.String"> 
      <column name="NAME" /> 
     </property> 
     <property name="value" type="java.lang.String"> 
      <column name="VALUE" /> 
     </property> 
    </class> 
    <class name="com.Bucket" table="BUCKETTABLE3" entity-name="Buckettable3"> 
     <cache usage="read-only"/> 
     <id name="id" type="long"> 
      <column name="ID" /> 
      <generator class="assigned" /> 
     </id> 
     <property name="name" type="java.lang.String"> 
      <column name="NAME" /> 
     </property> 
     <property name="value" type="java.lang.String"> 
      <column name="VALUE" /> 
     </property> 
    </class> 
</hibernate-mapping> 

を持っている私が欲しいですこの重複を避けるために、扱うテーブルの数をハードコードしたくありません。

答えて

0

質問

for (int i = 0; i < tablecount; i++) 
{ 
    // %number% is a placeholder in the mapping for the table and the entity name 
    configuration.add(templatemapping.replace("%number%", i); 
} 

多分あなたはインターフェイスを実装し、すべてのテーブルにUNIONを行い、すべてのマップされたクラスを見つけるため

class Entity implements Someinterface 

session.createCriteria(Someinterface.class); 

NHibernateの試行での使用を容易にすることができますに答えます。同じエンティティー名でも同じクラスでも同じように動作します。いくつのテーブルがあるかを知らなくても:

Entity allNtablesTogether = session.createCriteria(Someinterface.class).list(); 
関連する問題