2012-10-29 8 views
7

Sto utilizzando la mappatura basata su hibernate 4 e xml. Ecco l'eccezione sto ottenendoHibernate EnumTipo eccezione di istanza

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 

E qui è la mappatura enum che sto usando

<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> 

E qui viene l'enum:

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

qui è l'entità

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 
} 

Ho controllato tutoria l da qui - here ma sto ottenendo l'errore sopra. Hai bisogno di aiuto con questo.

+0

Avete la variabile 'status di CoachingStatus' dichiarata nell'entità per questo file' hbm.xml' –

+0

Sì. Aggiungerò l'entità anche nella domanda. – Shwetanka

risposta

9

Ho avuto lo stesso problema e sembra che la soluzione sia aggiungere un altro parametro. In questo modo non tenterà di mantenerlo come ordinale ma come stringa, quindi suppongo che la stringa funzioni meglio con il tipo VARCHAR.

<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> 

impostando useNamed a true Hibernate memorizzare enum usando il suo nome in modo i dati non si rompe se si cambia ordine nel vostro tipo enum.

Problemi correlati