[英]Runtime one-way mapping of n tables to 1 class in Hibernate
我的数据位于不同的表中,但位于同一数据库中,所有数据库都具有相同的架构。 根据某些运行时变量,我想选择查询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
-files之间的唯一区别是table属性。
有一些更好的方法吗? 理想情况下,使用一个 Class.hbm.xml
。
您可以使用注释而不是在hbm.xml文件中定义类吗? 您也许可以编写一个定义所有列映射的基类(因为您说它们不变),然后针对每个“ table1”,“ table2”,“ table3”方案分别对其扩展一次。子类具有不同的注释,该注释指向该类的正确表。 可能会工作。
根据某些运行时变量,我想选择查询Hibernate时要使用的表。
如果您问这种类型的问题,那么这表明Hibernate可能不是您的用例的最佳工具。
作为一个简单的解决方案,为什么不以编程方式控制HibernateUtil.getSessionFactory()方法中的Configuration中使用了哪些hbm.xml文件? 休眠配置对象可以通过编程配置 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.