2011-05-25 1 views
0

Je dois définir une contrainte XOR sur une entité en utilisant JPA, c'est-à-dire une contrainte qui spécifie que vous pouvez avoir une valeur dans la colonne A ou la colonne B mais pas les deux. Il semble être possible de le faire manuellement sur la base de données MsSQL comme suit, mais idéalement, je préférerais le définir sur l'entité en utilisant les annotations JPA.Est-il possible de définir une contrainte XOR en utilisant 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] 

Est-ce possible?

+0

Est-ce que quelqu'un a trouvé une solution? – cosmolev

Répondre

1

Vous pouvez définir ce morceau de logique dans une méthode et l'annoter avec @PrePersist et @PreUpdate. L'inconvénient est que la contrainte ne sera pas reflétée sur la base de données, donc une autre application (ou personne) pourrait insérer une ligne avec des valeurs nulles sur les deux colonnes.

Vous trouverez plus d'informations sur les annotations du cycle de vie et les écouteurs d'entité here.

Questions connexes