2012-10-29 19 views
7

Ich verwende Hibernate 4 und XML-basierte Zuordnung. Hier ist die Ausnahme, die ich binHibernate EnumType Instanziierung Ausnahme

Caused by: org.hibernate.MappingException: Unable to instantiate custom type: org.hibernate.type.EnumType 
    at org.hibernate.type.TypeFactory.custom(TypeFactory.java:193) 
    at org.hibernate.type.TypeFactory.custom(TypeFactory.java:179) 
    at org.hibernate.type.TypeFactory.byClass(TypeFactory.java:103) 
    at org.hibernate.type.TypeResolver.heuristicType(TypeResolver.java:130) 
    at org.hibernate.mapping.SimpleValue.getType(SimpleValue.java:307) 
    at org.hibernate.mapping.SimpleValue.isValid(SimpleValue.java:294) 
    at org.hibernate.mapping.Property.isValid(Property.java:238) 
    at org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:469) 
    at org.hibernate.mapping.RootClass.validate(RootClass.java:270) 
    at org.hibernate.cfg.Configuration.validate(Configuration.java:1294) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1742) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1788) 
    at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:189) 
    at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:350) 
    at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:335) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$6.run(AbstractAutowireCapableBeanFactory.java:1504) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1502) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1452) 
    ... 35 more 
Caused by: java.lang.NullPointerException 
    at org.hibernate.type.EnumType.setParameterValues(EnumType.java:153) 
    at org.hibernate.type.TypeFactory.injectParameters(TypeFactory.java:131) 
    at org.hibernate.type.TypeFactory.custom(TypeFactory.java:189) 
    ... 53 more 

bekommen und hier ist das Enum-Mapping, das ich verwende

<property name="coachingStatus" column="status" update="true" insert="true" index="true"> 
     <type name="org.hibernate.type.EnumType"> 
     <param name="enumClass">com.tutorial.enums.CoachingStatus</param> 
     <param name="type">12</param> 
     </type> 
    </property> 

Und hier ist die Enum:

public enum CoachingStatus { 
    ACTIVE, BLOCKED, PENDING, EXPIRED 
} 

hier ist das Unternehmen

public class Coaching implements Serializable { 
    private Integer id; 
    private String name; 
    private Long locationId; 
    private Integer organisationId; 
    private Long ownerId; 
    private Date createdOn; 
    private Date modifiedOn; 
    private CoachingStatus coachingStatus; 
    private Long createdBy; 
    private Long modifiedBy; 
    private String email; 
    private String logo; 
    private String about; 
    private String phone; 
... //getters and setters 
} 

Ich überprüfte Tutorien l von hier - here aber ich bekomme über Fehler. Brauche Hilfe dabei.

+0

Haben Sie in der Entität für diese Datei 'hbm.xml' die Variable 'CoachingStatus status' angegeben –

+0

Ja. Ich werde die Entität auch in der Frage hinzufügen. – Shwetanka

Antwort

9

Ich hatte das gleiche Problem und es sieht so aus, als ob die Lösung ist, einen weiteren Parameter hinzuzufügen. Auf diese Weise wird es nicht versuchen, es als Ordinalzahl sondern als Zeichenfolge zu speichern, also denke ich, dass diese Zeichenfolge besser mit dem VARCHAR-Typ funktioniert.

<property name="coachingStatus" column="status" update="true" insert="true" index="true"> 
    <type name="org.hibernate.type.EnumType"> 
     <param name="enumClass">com.tutorial.enums.CoachingStatus</param> 
     <param name="type">12</param> 
     <param name="useNamed">true</param> 
    </type> 
</property> 

von useNamed zu true Hibernate Einstellung wird ENUM speichern, indem Sie seinen Namen so Ihre Daten werden nicht brechen, wenn Sie die Bestellung in Ihrem Aufzählungstyp verändern.

Verwandte Themen