java.lang.ClassCastException:org.hibernate.type.StringType无法强制转换为org.hibernate.type.VersionType(示例代码
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java.lang.ClassCastException:org.hibernate.type.StringType无法强制转换为org.hibernate.type.VersionType(示例代码相关的知识,希望对你有一定的参考价值。
我正在开发一个数据库连接器,以便从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中的所有类型。请帮助我的任何人。
非常感谢你,祝你今天过得愉快
在我的例子中,我从DB生成实体,一些实体列名称具有“版本”。此名称的生成器添加“@Version”注释,但此列类型为String - 对于@Version注释不可接受
出现这种类型的问题
- 如果在任何表中都有列名称为“VARCHAR”(字符串)类型的“版本”,则表示在hibernate中,“property”变为“version”,“type”变为“string”,如同 -
在.hbm.xml文件中
<version name="xyz" type="string"> <column name="xyz" length="30" not-null="true" /> </version>
- 如果特定属性有任何缺失的getter或setter方法。
- 如果.hbm.xml文件和POJO类文件不匹配。
我已经多次检查过所有的映射类。最后,问题来自一个映射类,它没有属性的正确类型...... :(感谢您的回复
缺少长度字段
<property name="userdefinedrole" type="string">
<column name="USERDEFINEDROLE" />
</property>
我在使用古老的hibernate3软件时遇到了这个问题。
解决方案是:直到hibernate3.5,StringType
是NullableType
的子类。
在hibernate 3.6中,这个关系结束了。
因此,qazxsw poi只能转换为qazxsw poi,直到休眠3.5,从休眠3.6开始不再如此。
最简单的解决方案是,距离未来几十年:切换回休眠3.5。
以上是关于java.lang.ClassCastException:org.hibernate.type.StringType无法强制转换为org.hibernate.type.VersionType(示例代码的主要内容,如果未能解决你的问题,请参考以下文章