9

hibernate4とxmlベースのマッピングを使用しています。これが私が得ている例外です

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

そして、これが私が使用している列挙型マッピングです

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

そしてここに列挙型があります:

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

ここにエンティティがあります

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
}

ここからチュートリアルをチェックアウトしました-ここですが、上記のエラーが発生しています。これについて助けが必要です。

4

1 に答える 1

9

同じ問題が発生しましたが、解決策は別のパラメーターを追加することのようです。そうすれば、序数としてではなく文字列として永続化しようとするので、文字列は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>

hibernateに設定useNamedするtrueと、列挙型の名前を使用して列挙型が格納されるため、列挙型の順序を変更してもデータが破損することはありません。

于 2012-11-05T22:26:19.183 に答える