我在不同的表中有数据,但在同一个数据库中,所有这些都具有相同的模式。根据某些运行时变量,我想在查询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
。
答案 0 :(得分:2)
您是否可以使用注释而不是在hbm.xml文件中定义类?您可能能够编写一个定义所有列映射的基类(因为您说它们没有更改),然后为每个“table1”,“table2”,“table3”场景扩展一次,其中每个子类具有不同的注释,指向该类的正确表。可能会工作。
答案 1 :(得分:2)
根据某些运行时变量,我想选择在查询Hibernate时使用哪个表。
如果你问这类问题,那么这告诉我Hibernate可能不是你用例的最佳工具。
作为一个简单的解决方案,为什么不以编程方式控制HibernateUtil.getSessionFactory()方法中的Configuration中使用哪些hbm.xml文件? Hibernate配置对象can be programmatically configured。