2010-08-27 20 views
4

Je souhaite avoir une colonne pour une entité qui n'accepte qu'un ensemble de valeurs énuméré. Par exemple, disons que j'ai une classe POJO/entity "Pet" avec une colonne String "petType". Je veux que petType n'accepte qu'une des trois valeurs: "chat", "chien" ou "gorille". Comment procéder pour annoter la méthode getPetType() afin de créer une contrainte de niveau de base de données qui l'applique?Ajout d'une contrainte à une colonne d'entité JPA ou Hibernate à l'aide d'annotations

J'autorise Hibernate à créer ou à mettre à jour ma table de base de données au démarrage de l'application via la propriété Hibernate "hbm2ddlauto" étant mise à "mise à jour".

J'ai essayé d'utiliser un type d'utilisateur paramétré en association avec l'annotation @Type, mais cela ne semble pas indiquer de contrainte sur la colonne de la base de données elle-même. Il ne semble pas y avoir de moyen de spécifier ce genre de contrainte dans l'annotation @Column, à part d'utiliser un peu de SQL avec l'élément columnDefinition, et j'hésite à faire ce chemin car il semble que tout ce que j'utiliserai ne sera pas cross plate-forme/base de données indépendante (important pour moi car je cours mon code en production sur Oracle mais je fais des tests en local en utilisant HSQLDB et Derby). Peut-être que ce que je veux faire ne peut tout simplement pas être fait simplement en utilisant des annotations.

Merci d'avance pour toute idée que vous pouvez me donner à ce sujet.

+0

Même problème ici. Surprenant qu'il ne semble y avoir aucun moyen d'y parvenir? – stian

Répondre

3

Créer un ENUM de type PetType et défini vous mapping comme

@Enumerated (EnumType.STRING)

De cette façon, les chaînes sont stockées dans la base de données et votre type java ENUM acceptent seulement les 3 valeurs que vous spécifiez.

+2

Cela fonctionne très bien au niveau Java/Hibernate, mais la contrainte sur la colonne de base de données n'est pas créée quand Hibernate crée/met à jour le schéma, donc je me retrouve avec une colonne de chaîne non contrainte dans la table de base de données. Ceci est problématique dans le cas où les données sont insérées dans la table en dehors de mon code Hibernate, en ce sens qu'une valeur peut être insérée dans la colonne qui n'est pas l'une des valeurs énumérées que j'ai spécifiées. –