8

我正在开发一个数据库连接器,以便从 Oracle 数据库中检索数据。我使用 Eclipse 中作为插件包含的 Hibernate 工具来生成 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 中的所有类型。任何人都可以帮助我,请。

非常感谢您,祝您有美好的一天

4

5 回答 5

16

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

于 2014-03-03T09:55:03.337 回答
3

出现此类问题

  • 如果在任何表中都有列名作为“VARCHAR”(字符串)类型的“版本”,则意味着在休眠中“属性”变为“版本”,“类型”变为“字符串”,如 -

    在 .hbm.xml 文件中

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

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

于 2018-04-19T10:31:51.600 回答
2

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

于 2013-04-10T12:54:55.100 回答
0

缺少长度字段

<property name="userdefinedrole" type="string">
    <column name="USERDEFINEDROLE" />
</property>
于 2013-02-28T10:44:35.373 回答
0

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

解决方案是这样的:在 hibernate3.5 之前,StringTypeNullableType.

在hibernate 3.6中,这种关系就结束了。

因此,只能在休眠 3.5 之前StringType转换为 a NullableType,而从休眠 3.6 则不再如此。

最简单的解决方案是,现在距离未来还有几十年:切换回休眠 3.5。

于 2019-04-12T19:01:24.520 回答