82 votes

Énumérations dans Hibernate

Il est souvent utile de disposer d'un champ dans un DAO dont la valeur vient de Java énumération. Un exemple typique est une connexion DAO où vous avez généralement un champ qui caractérise l'utilisateur "NORMAL" ou "ADMIN". En mode veille prolongée, je voudrais utiliser les 2 objets pour représenter cette relation dans un (semi-)typesafe façon:

class User {
    String username;
    String passwd;
    UserType type;
}

class UserType {
    private enum Type {ADMIN, NORMAL};
    private String type;

    //Setters/Getters for Hibernate
    public void setType(String type);
    public String getType();

    //Setters/Getters for user
    public void setUserType(UserType.Type t);
    public UserType.Type getUserType();

    public static UserType fromType(UserType.Type t);
}

Cela fonctionne, mais je trouve le UserType classe ungly et nécessitant trop de bureaucratie, juste pour stocker un couple de valeurs. Idéalement, Hibernate devrait soutenir les champs de type enum directement et serait de créer une table supplémentaire pour stocker les valeurs d'énumération.

Ma question est: Est-il possible de mapper directement une classe d'énumération en veille prolongée? Si non, est mon modèle pour représenter les énumérations assez bon ou j'ai loupé quelque chose? Quels sont les autres modèles utilisent les gens?

110voto

Gareth Davis Points 16190

à l’aide de mise en veille prolongée ou annotations JPA :

UserType est juste un enum java standard 5.

Je ne peux pas imaginer c’est juste limité aux annotations justes mais je ne sais pas vraiment comment procéder avec les fichiers hbm. Il peut être à charge même version, je suppose, mais je suis sûr que hibernate 3.2 + est requis.

Edit : il est possible dans un hbm, mais est un peu désordonné, jetez un oeil sur ce fil de discussion

15voto

Craig Points 1013

De la documentation de mise en veille prolongée : http://www.hibernate.org/272.html

Vous pouvez créer un typedef nouveau pour chacun de vos enums et référencer les typedefs dans la balise de propriété.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X