繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM