2011-05-25 68 views
0

我需要爲使用JPA的實體定義XOR約束,即約束條件指定您可以在列A或列B中都有值,但不能同時包含這兩個值(但至少有一個值)。似乎可以在MsSQL數據庫上手動執行此操作,但理想情況下,我希望使用JPA批註在實體上定義此操作。是否可以使用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] 

這可能嗎?

+0

有人找到了解決方案嗎? – cosmolev 2013-07-03 23:37:42

回答

1

您可以在方法中定義該邏輯塊,並使用@PrePersist和@PreUpdate對其進行註釋。 缺點是約束不會反映在數據庫上,所以另一個應用程序(或人員)可以在兩列上插入一個包含空值的行。

有關生命週期註釋和實體監聽器here的更多信息。

相關問題