java.lang.ClassCastException:org.hibernate.type.StringType无法强制转换为org.hibernate.type.VersionType

时间:2013-02-28 10:40:15

标签: java hibernate

我正在开发一个数据库连接器,以便从Oracle数据库中检索数据。我已经使用Hibernate工具作为Eclipse中的插件来生成Hibernate映射文件,因为我有很多要映射的类和表。但是,当我运行应用程序时,我得到以下异常:

java.lang.ClassCastException: org.hibernate.type.StringType cannot be cast to org.hibernate.type.VersionType
    at org.hibernate.tuple.PropertyFactory.buildVersionProperty(PropertyFactory.java:107)
    at org.hibernate.tuple.entity.EntityMetamodel.<init>(EntityMetamodel.java:181)
    at org.hibernate.persister.entity.AbstractEntityPersister.<init>(AbstractEntityPersister.java:485)
    at org.hibernate.persister.entity.SingleTableEntityPersister.<init>(SingleTableEntityPersister.java:133)
    at org.hibernate.persister.PersisterFactory.createClassPersister(PersisterFactory.java:84)
    at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:286)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1845)
    at eu.cartif.dwhconn.database.DBManager.checkDWHStatus(DBManager.java:57)
    at eu.cartif.dwhconn.database.DBManager.main(DBManager.java:24)

我认为问题可能是hbm文件的属性类型:

<hibernate-mapping>
<class name="eu.cartif.dwhconn.database.Ifcactorrole" table="IFCACTORROLE">
    <id name="role" type="string">
        <column name="ROLE" length="50" />
        <generator class="assigned" />
    </id>
    <property name="userdefinedrole" type="string">
        <column name="USERDEFINEDROLE" />
    </property>
    <property name="description" type="string">
        <column name="DESCRIPTION" length="3000" />
    </property>
    <set name="ifcpersons" table="IFCPERSON" inverse="true" lazy="true" fetch="select">
        <key>
            <column name="ROLES" length="50" />
        </key>
        <one-to-many class="eu.cartif.dwhconn.database.Ifcperson" />
    </set>
    <set name="ifcpersonandorganizations" table="IFCPERSONANDORGANIZATION" inverse="true" lazy="true" fetch="select">
        <key>
            <column name="ROLES" length="50" />
        </key>
        <one-to-many class="eu.cartif.dwhconn.database.Ifcpersonandorganization" />
    </set>
</class>
</hibernate-mapping>

但是,我不确定它,如果不是解决方案,我不想更改所有hbms中的所有类型。任何人都可以帮助我。

非常感谢您提前, 祝你有愉快的一天

5 个答案:

答案 0 :(得分:13)

就我而言,我从DB生成实体,而某些实体列名称具有“版本”。此名称的生成器添加“@Version”注释,但此列类型为String - 对于@Version注释不可接受

答案 1 :(得分:3)

发生此类问题

  • 如果列名为&#34;版本&#34; &#34; VARCHAR&#34; (字符串)在任何表中键入,表示在休眠&#34;属性&#34;成为&#34;版本&#34;和&#34;键入&#34;变成&#34;字符串&#34;,像 -

    .hbm.xml文件中的

    <version name="xyz" type="string">
        <column name="xyz" length="30" not-null="true" />
    </version>
    
  • 如果特定属性缺少getter或setter方法。

  • 如果 .hbm.xml 文件与 POJO 类文件不匹配。

答案 2 :(得分:1)

我已经多次检查过所有的映射类。最后,问题来自一个映射类,它没有属性的正确类型...... :( 感谢您的回复

答案 3 :(得分:0)

上缺少长度字段
<property name="userdefinedrole" type="string">
    <column name="USERDEFINEDROLE" />
</property>

答案 4 :(得分:0)

我在使用古老的hibernate3软件时遇到了这个问题。

解决方案是这样的:在hibernate3.5之前,sStringType的子类。

在休眠3.6中,此关系结束了。

因此,NullableType只能在冬眠3.5之前转换为StringType,而从冬眠3.6才可以转换成NullableType

最简单的解决方案是,距离未来几十年了:切换回休眠状态3.5。