【问题标题】:Hibernate 4.1 Errror: Could not create DynamicParameterizedType for type: org.hibernate.type.EnumTypeHibernate 4.1 错误:无法为类型创建 DynamicParameterizedType:org.hibernate.type.EnumType
【发布时间】:2012-08-29 16:36:48
【问题描述】:

我正在尝试将我的项目从 hibernate 3.6 升级到 4.1.6,我想我已经把所有的 jars 都放在了正确的位置,......等等,但现在我在谷歌搜索下遇到了这个异常并没有得到答案。我的代码在 Hibernate 3.6 上运行良好,我不确定这是我的映射问题还是其他问题。我正在使用 JPA 方法使用 Spring 3.1.2 配置休眠 4.1。

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;

【问题讨论】:

  • 是否有任何 BeanCreationException 或类似的东西?
  • nope nonoBeanCreationException,堆栈跟踪底部上方的两个异常
  • 能否请您发布一个您使用org.hibernate.type.EnumType 的课程?
  • 您的映射类在这里会有些用处。
  • 我已经打开了完全跟踪,我什至不能让休眠打印出是什么映射导致了问题。我有 50 多个实体,但我不知道是哪一个导致了问题。

标签: java spring hibernate hibernate-4.x


【解决方案1】:

事实证明,我有一个额外的 @Enumerated,hibernate 3.6 忽略了它,这让 hibernate 4.1 感到困惑

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

我忘记了 @Enumerated 在这个字段上,它有一个 char 类型,但 setter 和 getter 使用了正确的 Enum。删除 @Enumerated 解决了这个问题,这是我的映射中的一个错误。

Hibernate 4.1 未能指出表的名称和列的名称,这使得很难确定是哪个映射导致了问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-03
    • 2011-09-03
    相关资源
    最近更新 更多