2012-08-29 5 views
1

최대 절전 모드 3.6에서 4.1.6으로 프로젝트를 업그레이드하려고하는데, 모든 병이 올바른 위치에 있다고 생각합니다. .. 등하지만 지금 나는이 예외를 인터넷 검색 아래에 답변을 굴복하지 않았습니다. 내 코드는 Hibernate 3.6에서 잘 돌아가고 이것이 내 맵핑이나 다른 것에 문제가 있는지 확실하지 않다. JPA 방식을 사용하여 Spring 3.1.2로 최대 절전 모드 4.1을 구성했습니다.Hibernate 4.1 Errror : 타입에 대한 DynamicParameterizedType을 만들 수 없습니다 : org.hibernate.type.EnumType

Caused by: org.hibernate.MappingException: Could not create DynamicParameterizedType for type: org.hibernate.type.EnumType 
     at org.hibernate.mapping.SimpleValue.createParameterImpl(SimpleValue.java:398) 
     at org.hibernate.mapping.SimpleValue.getType(SimpleValue.java:304) 
     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:1738) 
     at org.hibernate.ejb.EntityManagerFactoryImpl.<init>(EntityManagerFactoryImpl.java:94) 
     at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:905) 
     ... 55 more 
    Caused by: java.lang.ClassNotFoundException: char 
     at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1711) 
     at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1556) 
     at java.lang.Class.forName0(Native Method) 
     at java.lang.Class.forName(Class.java:186) 
     at org.hibernate.internal.util.ReflectHelper.classForName(ReflectHelper.java:192) 
     at org.hibernate.mapping.SimpleValue.createParameterImpl(SimpleValue.java:389) 
     ... 64 more 

업데이트 : 그 예외가 잡힌하고 좋아하지 않는 매핑을 발견, 여기 아래 인 최대 절전 모드 코드 내가 넣어 가지고 브레이크 포인트.

@Entity 
@Table(name = "company_addresses") 
public class CompanyAddress extends TimeStampedPersistableObject 
{ 
public enum AddressType 
{ 
    PUBLIC('p'), SHAREHOLDER('s'); 

    private final char typeCode; 

    AddressType(char typeCode) 
    { 
     this.typeCode = typeCode; 
    } 

    public static AddressType parse(char c) 
    { 
     for (AddressType addressType : AddressType.values()) 
     { 
      if (addressType.value() == c) 
      { 
       return addressType; 
      } 
     } 
     return null; 
    } 

    public char value() 
    { 
     return typeCode; 
    } 
} 

@Column(name = "address_type") 
@Enumerated(EnumType.STRING) 
private char type; 
+0

BeanCreationException 같은 것이 있습니까? –

+0

nope no noBeanCreationException, 스택 추적 맨 아래에있는 두 개의 예외. – ams

+2

'org.hibernate.type.EnumType'을 사용하는 클래스를 게시 할 수 있습니까? –

답변

0

그것은 3.6 나는 문자 유형하지만이 있습니다이 분야에 @Enumerated을 까맣게 잊고 4.1

@Column(name = "address_type") 
@Enumerated(EnumType.STRING) 
private char type; 

를 최대 절전 모드로 혼란 한 무시 된 최대 절전 모드있는 내가 추가 @Enumerated을 한 것으로 밝혀졌다 setter 및 getter에 적절한 Enum을 사용합니다. @Enumerated를 제거하면 내 매핑의 버그 인 문제가 해결되었습니다.

Hibernate 4.1은 테이블의 이름과 어떤 매핑이 문제를 일으키는 지 파악하기가 약간 어려웠던 컬럼의 이름을 표시하지 못했습니다.

+1

FWIW https://hibernate.onjira.com/browse/HHH-7567 –