Одностороннее отображение во время выполнения n таблиц в 1 класс в Hibernate - PullRequest
2 голосов
/ 20 июля 2010

У меня есть данные в разных таблицах, но в одной базе данных, каждая из которых имеет одну и ту же схему.В зависимости от некоторой переменной времени выполнения, я хочу выбрать, какую таблицу использовать при запросе 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 -файлами - это атрибут таблицы.

Есть ли какой-нибудь более причудливый способ сделать это?В идеале с one Class.hbm.xml.

Ответы [ 2 ]

2 голосов
/ 20 июля 2010

В зависимости от некоторой переменной времени выполнения, я хочу выбрать, какую таблицу использовать при запросе Hibernate.

Если вы задаете этот тип вопроса, то это говорит о том, что Hibernate не можетбыть лучшим инструментом для вашего случая использования.

Как простое решение, почему бы просто не программно контролировать, какие файлы hbm.xml используются в конфигурации в вашем методе HibernateUtil.getSessionFactory ()?Объект конфигурации Hibernate может быть программно настроен .

2 голосов
/ 20 июля 2010

Не могли бы вы использовать аннотации вместо определения класса в файле hbm.xml?Возможно, вы сможете написать базовый класс, который определяет все сопоставления столбцов (поскольку вы сказали, что они не меняются), а затем расширить его один раз для каждого из ваших сценариев «table1», «table2», «table3», где каждый изУ дочерних классов есть другая аннотация, которая указывает на правильную таблицу для этого класса.Может работать.

...