Запретить JPA изменять тип данных столбца БДJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Запретить JPA изменять тип данных столбца БД

Сообщение Anonymous »

У меня есть база данных PostgreSQL, и я использую Flyway в приложении весенней загрузки, чтобы создать следующую таблицу и перечисление:

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

CREATE EXTENSION citext;

CREATE TYPE metadata_type AS ENUM ('STRING', 'DATE', 'INTEGER', 'DOUBLE');

CREATE TABLE metadata
(
id         BIGSERIAL PRIMARY KEY,
name       CITEXT        NOT NULL,
type       metadata_type NOT NULL,
created_at TIMESTAMP     NOT NULL,
updated_at TIMESTAMP     NOT NULL
);

ALTER TABLE metadata
ADD CONSTRAINT metadata_unique_name UNIQUE (name);
После запуска промежуточного пути и создания таблицы определение таблицы выглядит следующим образом:
[img]https://i. sstatic.net/QSSQoGDn.png[/img]
Затем я создаю объект JPA для этой таблицы:

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

@Entity
public class Metadata {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private Long id;

@Column(nullable = false, unique = true)
private String name;

@Column(nullable = false)
@Enumerated(EnumType.STRING)
private GalleryMetadataType type;

@CreatedDate
@Column(updatable = false)
private LocalDateTime createdAt;

@LastModifiedDate
private LocalDateTime updatedAt;
}
И после запуска приложения определение таблицы меняется на следующее:
[img]https://i.sstatic .net/bZByoeAU.png[/img]
Как видите, типы данных столбцов «имя» и «тип» меняются на varchar. Я могу жить с изменением перечисления на varchar. Но CITEXT не должен меняться на varchar! Это нарушает ограничение уникальности, поскольку теперь и «тест», и «Тест» можно использовать одновременно.
Как я могу запретить JPA изменять типы данных? Или какой класс мне следует использовать вместо String для CITEXT?
Мой обходной путь — использовать varchar вместо CITEXT и создать индекс следующим образом:

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

CREATE UNIQUE INDEX metadata_idx_unique_name ON metadata (LOWER(name));
Но, возможно, есть способ использовать CITEXT.


Подробнее здесь: https://stackoverflow.com/questions/790 ... -data-type
Ответить

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

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

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

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

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