Это может быть сделано динамически, но это несколько грязно:
Вам нужно будет динамически изменить объект конфигурации Hibernate перед созданием SessionFactory. Если вы используете Spring, это можно сделать, переопределив postProcessAnnotationConfiguration()
метод AnnotationSessionFactoryBean
; в противном случае вам просто нужно будет сделать это с помощью объекта конфигурации, прежде чем вызывать buildSessionFactory()
для него.
Если вам нужно сделать это без перезапуска приложения, вы рассматриваете либо перестройку SessionFactory (что означает, что вашим пользователям придется ждать, пока это не будет сделано), либо использование отдельного экземпляра SessionFactory, специально выделенного для ваших пользовательских классов ( почти невозможно, если ваши пользовательские классы должны ссылаться на ваши встроенные классы).
Вы можете получить доступ к отображению классов / таблиц через configuration.getMappings()
. Затем вам нужно будет создать новое отображение таблиц с помощью Table API и добавить его в конфигурацию с помощью addTable()
. То же самое должно быть сделано с PersistentClass , который представляет отображение класса. Если вы используете один и тот же класс для представления нескольких сущностей (например, сопоставление нескольких таблиц), убедитесь, что вы используете уникальные имена сущностей для каждой из них. Вам придется делать это (изменять конфигурацию) при каждом перезапуске приложения.