我有一些oracle表,如table1,表2,表n具有相同的结构。
如果我在运行应用程序之前知道我有多少表,我可以将一些<class>
标签与相同的类名但不同的表名和相关的实体名称(复制属性标签映射)放在一起。
但我不知道编译时的所有表名;当应用程序运行时,它知道我有多少个表:是否可以在查询时设置表名?
我的所有表都像前缀(表)加后缀(1,2,3,n),但我知道运行时的n限制。
我必须逐个查询所有表格来填充地图。
这是我的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 :(得分: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。也许它也可以在不同的实体名称上使用相同的类。然后不知道有多少表:
Entity allNtablesTogether = session.createCriteria(Someinterface.class).list();