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  {}


Как решить данную проблему?
Да и в некоторых стендах нужно использовать сразу две схемы для разных сущностей. Помогите решить проблему!
  • Вопрос задан
  • 72 просмотра
Пригласить эксперта
Ответы на вопрос 3
@xez
Senior Junior Roo
Остановись, друг! Ты явно не туда идешь!
Код не должен зависить от среды вообще. Это слишком сильная связанность.
Prod, test, qa, staging, dev (etc..) должны быть разделены на уровне конфигурации.
Ответ написан
@azerphoenix
Здравствуйте!
Если я правильно понял, то у вас есть база, в которой есть 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).
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы