краткий обзор ситуации. У меня есть база данных 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 из-за «времени», в которое оцениваются переменные, поэтому я больше думал о настройке конфигурации запуска, но все еще не знаю, как это сделать. Любое предложение было бы полезным, спасибо
Вам нужно будет предоставить ORM.xml. В ORM.xml вы можете переопределить определение столбца. А также вы можете установить расположение ORM.xml для каждой среды. (Вам нужно будет настроить его вручную)
К сожалению, для этого вам потребуется небольшая настройка, но взгляните на этот вопрос Может поможет.
Вы можете иметь одну и ту же сборку для каждой среды и указать, какой профиль Spring должен быть активен при запуске приложения (параметр -D) (тем самым устанавливая активный файл application-PROFILE.properties).
На самом деле это может быть хорошим решением, единственная проблема, которую я вижу, заключается в том, что при перестройке всего проекта, импортирующего зависимости Maven, это исправление сломается, возможно, я мог бы просто написать файл патча, чтобы переписать orm.xml после импорта, но я все еще надеюсь на более чистое решение ^^