2009-07-02 5 views
9

J'ai une table de base de données en utilisant une énumération. Cela fonctionne déjà avec hibernate (en utilisant XML), et j'essaye de le convertir en annotations car c'est l'une des dernières pièces à utiliser encore la notation xml.MySQL enum avec hibernate

La définition de la colonne:

enum('Active','Pending','Cancelled','Suspend') 

Les travaux suivants:

<property 
    name="status" 
    column="STATUS" 
    type="string" 
    not-null="true" /> 

Cela ne fonctionne pas:

@Column(name = "status") 
public String status; 

Le style d'annotation conduit à l'exception suivante lors du démarrage: org.hibernate.HibernateException: type de colonne incorrect dans UserDTO pour colum n statut. Trouvé: enum, attendu: varchar (255)

Y a-t-il un moyen pour moi de forcer cela à accepter une chaîne de caractères comme cela a été fait avec la notation XML?

Répondre

18

Je l'ai compris. Il devrait être:

@Column(name="status", columnDefinition="enum('Active','Pending','Cancelled','Suspend')") 
public String status; 
+0

votre solution est correcte au moins pour la base de données MySQL, mais échoue pour les bases de données H2 utilisées dans les tests par exemple (cas de création automatique de schéma). Il semble que cela ne soit pas 100% portable, pour autant que je me souvienne qu'il y ait aussi des problèmes sur PostgresSQL (du moins si nous nous attendons à ce que le schéma soit généré automatiquement). – kornicameister