在Hibernate中将n个表的运行时单向映射到1个类

时间:2010-07-20 18:26:24

标签: java hibernate mapping orm sessionfactory

我在不同的表中有数据,但在同一个数据库中,所有这些都具有相同的模式。根据某些运行时变量,我想在查询Hibernate时选择使用哪个表。这可能吗?

请注意,我只使用Hibernate 读取表数据到对象。

一个解决方案(我认为)将是一个*.hbm.xml - 每个表的文件和每个表一个SessionFactory:

ClassTable1.hbm.xml: <class name="Class" table="table1">...</class>
ClassTable2.hbm.xml: <class name="Class" table="table2">...</class>
ClassTable3.hbm.xml: <class name="Class" table="table3">...</class>

HibernateUtil.java:
    getSessionFactoryTable1() {...} // load mapping ClassTable1.hbm.xml
    getSessionFactoryTable2() {...} // load mapping ClassTable2.hbm.xml
    getSessionFactoryTable3() {...} // load mapping ClassTable3.hbm.xml

难看。特别是考虑到*hbm.xml - 文件之间的唯一区别是表属性。

有更好的方法吗?理想情况下,使用一个 Class.hbm.xml

2 个答案:

答案 0 :(得分:2)

您是否可以使用注释而不是在hbm.xml文件中定义类?您可能能够编写一个定义所有列映射的基类(因为您说它们没有更改),然后为每个“table1”,“table2”,“table3”场景扩展一次,其中每个子类具有不同的注释,指向该类的正确表。可能会工作。

答案 1 :(得分:2)

  

根据某些运行时变量,我想选择在查询Hibernate时使用哪个表。

如果你问这类问题,那么这告诉我Hibernate可能不是你用例的最佳工具。

作为一个简单的解决方案,为什么不以编程方式控制HibernateUtil.getSessionFactory()方法中的Configuration中使用哪些hbm.xml文件? Hibernate配置对象can be programmatically configured