Как автоматически обновить ограничение проверки Hibernate после изменения Enum в Spring Boot?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как автоматически обновить ограничение проверки Hibernate после изменения Enum в Spring Boot?

Сообщение Anonymous »

У меня есть приложение Spring Boot, использующее Hibernate, где я недавно добавил новые значения в перечисление ContactTypeConstant, используемое в классе сущности BlockItemEntity. Объект сопоставляется с базой данных PostgreSQL.
Вот упрощенная версия объекта и перечисления:
BlockItemEntity:

Код: Выделить всё

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name = "block_item", schema = "public")
public class BlockItemEntity implements Serializable {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
protected long id;

@Column(length = 256)
private String title;

@Enumerated(EnumType.STRING)
private ContactTypeConstant contactType;

}
ConstantTypeConstant:

Код: Выделить всё

@RequiredArgsConstructor
@Getter
public enum ContactTypeConstant {
EMAIL(10, "email"),
PHONE(20, "phone");

private final long id;
private final String title;

}
Изначально ограничение базы данных было создано без учета дополнительных значений перечисления:

Код: Выделить всё

ALTER TABLE block_item
ADD CONSTRAINT block_item_contact_type_check
CHECK ((contact_type)::text = ANY
((ARRAY ['EMAIL'::character varying, 'PHONE'::character varying])::text[]));
Позже я добавил в ContactTypeConstant новые значения перечисления «MOBILE» и «SMS». Когда Hibernate пытается вставить новый BlockItemEntity, используя эти обновленные значения перечисления, я сталкиваюсь с ошибкой нарушения ограничения:

Код: Выделить всё

ERROR: new row for relation "block_item" violates check constraint "block_item_contact_type_check"
Есть ли способ заставить Hibernate автоматически обновлять проверочное ограничение на основе измененных значений перечисления? Если нет, то каков рекомендуемый подход для обработки таких изменений перечислений в базе данных с помощью Hibernate и Spring Boot?
Я исследовал использование ALTER TABLE для удаления и повторного создания таблицы, обновления проверочное ограничение для включения новых значений перечисления. Хотя изначально я ожидал, что Hibernate будет обрабатывать такие обновления автоматически.

Подробнее здесь: https://stackoverflow.com/questions/774 ... fication-i
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»