Я хочу создать приложение с Spring Boot, Spring Data JPA и PostgreSQL.
В моей модели данных есть некоторые частичные уникальные индексы, которые работают с некоторыми правилами, подобными приведенным ниже:
drop table if exists persons.person;
create table if not exists persons.person (
id bigserial,
name varchar(99) not null,
sobrename varchar(99) not null,
birthdate date,
official_registry varchar(32) not null,
realPerson_sn bool not null default true, -- in case of real person, true, juridical person, false
isMatrix bool null, -- in case of eral person, female = false, male = true
isConfirmed bool default false, -- if data is confirmed officially
constraint person_id primary key(id),
); create unique index person_juridical_cnpj_ix on persons.person (official_registry) where (realPerson_sn = false);
create unique index person_realPerson_ix on persons.person (name, sobrename, birthdate_dt) where (realPerson_sn = true);
create unique index person_realPerson_cpf_ix on persons.person (official_registry) where ((realPerson_sn = true) and ((official_registry <> null) and (official_registry <> '')));
В этом примере я хочу использовать одну таблицу для хранения как реальных, так и юридических лиц, используя сходства в их данных, таких как имена, реестр и т. Д. И после этого я создал уникальные индексы, которые отражают различия между ними, чтобы облегчить поиск записей в обоих случаях.
Примечание о критицизме: это только один пример, у меня есть несколько таблиц, использующих эти типы индексов с предложением where, поэтому не имеет значения, если этот пример можно заменить на 2 таблицы, мне все равно понадобится где пункты в других индексах.
Мне удалось скомпилировать всю мою модель в PostgreSQL 9, и она хорошо работала, когда я использовал ее в приложениях Delphi и PHP.
Но теперь я хочу реализовать его в Java Spring Boot и Angular. Но я хочу переписать модель, чтобы она была скомпилирована из JPA с нуля.
Возможно ли воссоздать эти правила индекса в JPA, или это PostgreSQL, который не охватывается JPA, Hibernate, Spring Data и другими?