Я хотел бы определить ограничение в JPA для объекта, чтобы убедиться, что для одного из двух свойств "текст" или "заголовок" задано ненулевое значение.
Для этого примера предположим, что следующий класс сущностей Вопрос:
@Entity
@Table
public class Question {
@Id
private Long id;
@Column(nullable = true)
private String text;
@Column(nullable = true)
private String title;
}
Для этого класса JPA сгенерирует следующую инструкцию SQL (нам нужно использовать диалект оракула):
create table question (
id number(19,0) not null,
text varchar2(50 char) null,
title varchar2(10,0) null,
primary key (id)
);
Чтобы проверить, установлено ли одно из свойств, я мог бы добавить проверочное ограничение:
@Entity
@Table
@Check(constraints = "TEXT IS NOT NULL OR TITLE IS NOT NULL")
public class Question {
...
}
Теперь JPA сгенерирует это:
create table question (
id number(19,0) not null,
text varchar2(50 char) null,
title varchar2(10,0) null,
primary key (id),
check (TEXT IS NOT NULL OR TITLE IS NOT NULL)
);
На стороне базы данных это сгенерирует проверочное ограничение со случайным именем, например «SYS_C00127157».
Чтобы присвоить значимое имя (например: check_title ) ограничению, я мог бы использовать этот DDL:
create table question (
id number(19,0) not null,
text varchar2(50 char) null,
title varchar2(10,0) null,
primary key (id),
constraint check_title check(TEXT IS NOT NULL OR TITLE IS NOT NULL)
);
Что я ищу, так этокак то так:
@Entity
@Table
@Check(name = "check_title" constraints = "TEXT IS NOT NULL OR TITLE IS NOT NULL")
public class Question {
...
}
К сожалению, это невозможно.Аннотация @Check в Java не предлагает такого свойства name для ограничения.
Есть ли другой способ задать имя, чтобы сгенерированный DDL соответствовал ожидаемому результату?