0

JPA を使用してエンティティに XOR 制約を定義する必要があります。つまり、列 A または列 B のいずれかに値を持つことができるが、両方 (ただし、少なくとも 1 つ) には値を持てないことを指定する制約です。次のように 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 で注釈を付けることができます。欠点は、制約が DB に反映されないため、別のアプリケーション (またはユーザー) が両方の列に null を含む行を挿入する可能性があることです。

ライフサイクル アノテーションとエンティティ リスナーの詳細については、こちらを参照してください。

于 2011-05-27T06:38:12.980 に答える