2

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

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

一个解决方案(我认为)是*.hbm.xml每个表一个 -file 和一个 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.

4

2 回答 2

2

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

于 2010-07-20T18:40:18.440 回答
2

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

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

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

于 2010-07-20T18:40:48.497 回答