title: Enumerations in Hibernate
body: <p>It is often useful to have a field in a DAO whose value comes from a Java enumeration. A typical example is a login DAO where you usually have a field that characterises the user as "NORMAL" or "ADMIN". In Hibernate, I would use the following 2 objects to represent this relationship in a (semi-)typesafe way:</p>
  
  <pre><code>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);
  }
  </code></pre>
  
  <p>This works, but I find the UserType class ungly and requiring too much bureaucracy just to store a couple of values. Ideally, Hibernate should support enum fields directly and would create an extra table to store the enumeration values.</p>
  
  <p>My question is: Is there any way to directly map an enumeration class in Hibernate? If not, is my pattern for representing enumerations good enough or am I missing something? What other patterns do people use? </p>