java.lang.ClassCastException:org.hibernate.type.StringType不能强制转换为org.hibernate.type.VersionType
我正在开发一个数据库连接器,以便从Oracle数据库检索数据。我使用了Eclipse中作为插件包含的Hibernate工具来生成Hibernate映射文件,因为我有很多类和表要映射。但是,当我运行应用程序时,我刚刚得到以下异常:java.lang.ClassCastException:org.hibernate.type.StringType不能强制转换为org.hibernate.type.VersionType,java,hibernate,Java,Hibernate,我正在开发一个数据库连接器,以便从Oracle数据库检索数据。我使用了Eclipse中作为插件包含的Hibernate工具来生成Hibernate映射文件,因为我有很多类和表要映射。但是,当我运行应用程序时,我刚刚得到以下异常: java.lang.ClassCastException: org.hibernate.type.StringType cannot be cast to org.hibernate.type.VersionType at org.hibernate.tuple
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)
java.lang.ClassCastException:org.hibernate.type.StringType不能强制转换为org.hibernate.type.VersionType
位于org.hibernate.tuple.PropertyFactory.buildVersionProperty(PropertyFactory.java:107)
位于org.hibernate.tuple.entity.EntityMetamodel。(EntityMetamodel.java:181)
位于org.hibernate.persister.entity.AbstractEntityPersister。(AbstractEntityPersister.java:485)
位于org.hibernate.persister.entity.SingleTableEntityTyperSister。(SingleTableEntityTyperSister.java:133)
位于org.hibernate.persister.PersisterFactory.createClassPersister(PersisterFactory.java:84)
位于org.hibernate.impl.SessionFactoryImpl.(SessionFactoryImpl.java:286)
位于org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1845)
位于eu.cartif.dwhconn.database.DBManager.checkDWHStatus(DBManager.java:57)
位于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>
但是,我不确定,如果这不是解决方案,我不想更改所有HBM中的所有类型。任何人都可以帮助我
事先非常感谢,
祝您度过愉快的一天缺少长度字段
<property name="userdefinedrole" type="string">
<column name="USERDEFINEDROLE" />
</property>
我已经多次检查了所有映射类。最后,问题来自一个映射类,该类没有适当的属性类型…:(
感谢您的回复在我的例子中,我从DB生成了实体,一些实体列名有“版本”。此名称的生成器添加了“@version”注释,但此列类型是字符串-对于@version注释不可接受这种类型的问题会发生
- 如果在任何表中有“VARCHAR”(string)类型的“version”列名,则表示在hibernate中,“property”变为“version”,而“type”变为“string”,如-
在.hbm.xml文件中
- 如果特定属性缺少任何getter或setter方法
- 如果.hbm.xml文件和POJO类文件之间不匹配
- 我在一个古老的hibernate3软件上工作时遇到了这个问题
解决方案是这样的:在hibernate3.5之前,
StringType
是NullableType
的子类
在hibernate 3.6中,这种关系结束了
因此,只有在hibernate 3.5之前,StringType
才可转换为NullableType
,而在hibernate 3.6之后就不再如此了
最简单的解决方案是,现在距离未来几十年:切换回hibernate 3.5。您确定这是导致该异常的类吗?其他实体的映射文件如何?您是否在某处使用版本或名为
版本
的属性?我正在搜索任何名为“version”的属性或字段。但是,唯一发现的是您是否也使用批注?该类是否包含同名字段?我没有使用批注,也没有使用名为“version”的字段:-(我认为长度无关紧要,因为在java类中,属性是一个没有长度的字符串,问题在于强制转换。但是我尝试了您的解决方案,但它不起作用。
<version name="xyz" type="string">
<column name="xyz" length="30" not-null="true" />
</version>