devpav
@devpav
Full-Stack разработчик.

Как подменить схему базы данных в Entity Hibernate?

Привет, друг. Хочу понять как правильно динамически менять схему в сущностях.

В dev среде DEV.EntityValue в прод PROD.EntityValue.
Не хотелось бы указывать @Table(name = "VALUES", schema = "DEV").

@Entity
@Table(name = "VALUES")
public class EntityValue extends BaseEntity  {}


Как решить данную проблему?
Да и в некоторых стендах нужно использовать сразу две схемы для разных сущностей. Помогите решить проблему!
  • Вопрос задан
  • 457 просмотров
Пригласить эксперта
Ответы на вопрос 3
xez
@xez Куратор тега Java
TL Junior Roo
Остановись, друг! Ты явно не туда идешь!
Код не должен зависить от среды вообще. Это слишком сильная связанность.
Prod, test, qa, staging, dev (etc..) должны быть разделены на уровне конфигурации.
Ответ написан
azerphoenix
@azerphoenix Куратор тега Java
Java Software Engineer
Здравствуйте!
Если я правильно понял, то у вас есть база, в которой есть 2 схемы. И в зависимости от профиля вы хотите переключать схемы?

Я вижу тут пару вариантов:
1) на уровне gradle || maven определить схемы.
https://stackoverflow.com/questions/47240702/jpa-e...
https://stackoverflow.com/questions/1149352/using-...
<profiles>
    <profile>
      <id>production</id>
      <properties>
        <schema.name>production_schema_name</schema.name>
      </properties>
    </profile>
    <profile>
      <id>test</id>
      <properties>
        <schema.name>test_schema_name</schema.name>
      </properties>
    </profile>
</profiles>

2) использовать различные БД для разных профилей. Т.е. создать 2 БД по одной для каждого профиля.
3) Создать 2 пакета (dev, prod) с сущностями, где для каждой из сущностей указывать:
Для сущностей development
@Table(name = "VALUES", schema = "DEV").
Для сущностей production
@Table(name = "VALUES", schema = "PROD").
Ну и использовать аннотацию @Profile
Ответ написан
Комментировать
@mystifier
Как вариант можно создать Interceptor - наследник org.hibernate.EmptyInterceptor и в методе onPrepareStatement подменять хоть схему, хоть имя таблицы . Для этого нужно, чтобы была информация о профиле сборки(dev/prod).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Bell Integrator Ульяновск
До 400 000 ₽
Bell Integrator Ижевск
До 400 000 ₽
Bell Integrator Хабаровск
До 400 000 ₽
29 мар. 2024, в 17:14
4000 руб./за проект
29 мар. 2024, в 17:04
5000 руб./за проект
29 мар. 2024, в 17:03
3000 руб./за проект