2012-02-02 64 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(); 
相关问题