0

我需要在使用 JPA 的实体上定义 XOR 约束,即指定您可以在 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]

这可能吗?

4

1 回答 1

1

您可以在方法中定义那段逻辑并使用@PrePersist 和@PreUpdate 对其进行注释。缺点是约束不会反映在数据库上,因此另一个应用程序(或人)可以在两列上插入一行带有空值的行。

这里有关于生命周期注释和实体监听器的更多信息。

于 2011-05-27T06:38:12.980 回答