Можно ли определить ограничение XOR с помощью JPA? - PullRequest
0 голосов
/ 25 мая 2011

Мне нужно определить ограничение XOR для объекта, используя JPA, то есть ограничение, которое указывает, что вы можете иметь значение в столбце A или столбце B, но не в обоих (но хотя бы в одном из них).Кажется, возможно сделать это вручную в базе данных MsSQL следующим образом, но в идеале я бы предпочел определить это для сущности, используя аннотации JPA.

    CREATE TABLE [dbo].[test01](
       [i1] [int] NULL,
       [i2] [int] NULL
    ) ON [PRIMARY]

    ALTER TABLE [dbo].[test01]  WITH CHECK ADD  CONSTRAINT [CK_test01] CHECK  
    (([i1] IS NULL AND [i2] IS NOT NULL OR [i2] IS NULL AND [i1] IS NOT NULL))

    ALTER TABLE [dbo].[test01] CHECK CONSTRAINT [CK_test01]

Возможно ли это?

1 Ответ

1 голос
/ 27 мая 2011

Вы можете определить этот фрагмент логики в методе и аннотировать его с помощью @PrePersist и @PreUpdate. Недостаток заключается в том, что ограничение не будет отражено в БД, поэтому другое приложение (или пользователь) может вставить строку с нулями в оба столбца.

Более подробная информация об аннотациях жизненного цикла и прослушивателях сущностей здесь .

...