Spring, H2 определяют разные значения аннотаций для разных сред

краткий обзор ситуации. У меня есть база данных Postgres с полем «JSONB», и я подключил ее к своему приложению Spring, в котором я использую Hibernate как ORM. Я определил свой собственный тип JSON и назначил этот тип соответствующему столбцу Postgres:

@Column(name = "note", columnDefinition = "jsonb")
@Type(type = "JsonNoteType")
private JsonNote jsonNote;

Здесь все работает нормально, проблема возникает, потому что я также хочу иметь вторую тестовую среду, в которой я загружаю данные в H2 в базе данных памяти. Поскольку H2 не поддерживает тип JSONB, я должен сказать ему, чтобы он относился к нему как к «другому» объекту, это приводит к изменению columnDefinition:

@Column(name = "note", columnDefinition = "other")
@Type(type = "JsonNoteType")
private JsonNote jsonNote;

На данный момент я вручную меняю это поле в зависимости от тестов, которые я хотел запустить.

Как я могу настроить свое приложение на изменение значения аннотации columnDefinition?

Я не могу загрузить значение из application.properties из-за «времени», в которое оцениваются переменные, поэтому я больше думал о настройке конфигурации запуска, но все еще не знаю, как это сделать. Любое предложение было бы полезным, спасибо

2
0
137
1

Ответы 1

Вам нужно будет предоставить ORM.xml. В ORM.xml вы можете переопределить определение столбца. А также вы можете установить расположение ORM.xml для каждой среды. (Вам нужно будет настроить его вручную)

К сожалению, для этого вам потребуется небольшая настройка, но взгляните на этот вопрос Может поможет.

На самом деле это может быть хорошим решением, единственная проблема, которую я вижу, заключается в том, что при перестройке всего проекта, импортирующего зависимости Maven, это исправление сломается, возможно, я мог бы просто написать файл патча, чтобы переписать orm.xml после импорта, но я все еще надеюсь на более чистое решение ^^

AleDG 05.09.2018 09:05

Вы можете иметь одну и ту же сборку для каждой среды и указать, какой профиль Spring должен быть активен при запуске приложения (параметр -D) (тем самым устанавливая активный файл application-PROFILE.properties).

Reg 05.09.2018 09:10

Другие вопросы по теме