Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.lang.ClassCastException:org.hibernate.type.StringType不能强制转换为org.hibernate.type.VersionType_Java_Hibernate - Fatal编程技术网

java.lang.ClassCastException:org.hibernate.type.StringType不能强制转换为org.hibernate.type.VersionType

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

我正在开发一个数据库连接器,以便从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)
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>