Мне очень не нравится, что Hibernate не позволяет просто установить TransactionManager или CacheProvider и все другие важные интерфейсы в конфигурации. Вместо этого у этого есть варианты, такие как передача имени класса или имени класса поиску или поставщику. Опять же, просто невозможно передать экземпляр напрямую, и нужно использовать такие хаки, как установка локального потока, установка имени некоторого локатора класса и обратное считывание локального потока. Уродливые противные и т. Д. И т. Д. Конечно, кто-то все это очистил, поэтому я спрашиваю q.
RANT
Подумайте, насколько проще было бы объекты Config, если бы можно было просто установить, класс Configuration больше не будет иметь десятки и десятки свойств String и будет легко вводиться.
- бассейн
- поиск менеджера транзакций
- поставщик кеша
- источник данных
Простота
Написание новых провайдеров стало бы намного проще, и больше не нужно было бы заново изобретать протокол для чтения конфигурации из строки (строк) и адаптера. При правильном внедрении зависимостей нужно будет только написать последний
РАБОЧЕЕ РЕШЕНИЕ
Я начал работу с подклассификации некоторых классов Hibernate, чтобы я мог заменить значение по умолчанию экземпляром или оболочкой.
- Конфигурация - необходимо создать подкласс, который принимает SessionFactory, поскольку ctor, принимающий SessionFactory, защищен. Другие методы не затрагиваются.
- SettingsFactory - переопределить ключевые методы для возврата экземпляра.
и т.д.
пишу свой собственный SessionFactory