2012-02-02 70 views
2

我有一些oracle表像table1,表2,表n具有相同的結構。 如果我在運行應用程序之前知道我有多少表,我可以將一些<class>標記與相同的類名稱,但不同的表名稱和相關的實體名稱(複製屬性標記映射)。 但是我不知道編譯時的所有表名;當應用程序運行時,它知道我有多少個表:是否可以在查詢時設置表名? 我所有的表都像前綴(表)加上後綴(1,2,3,n),但我知道運行時的n極限。 我必須逐個查詢所有表來填充地圖。休眠映射不同的表與動態名稱到相同的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); 
} 

也許可以緩解使用與

class Entity implements Someinterface 

session.createCriteria(Someinterface.class); 

NHibernate的嘗試找到其實現該接口並執行所有表上的一個UNION ALL映射類。也許它也是這樣對不同的實體名稱,但同一類。然後不知道有多少表格:

Entity allNtablesTogether = session.createCriteria(Someinterface.class).list(); 
相關問題