2013-02-28 40 views
4

我正在開發數據庫連接器以從Oracle數據庫檢索數據。我使用了Hibernate工具作爲Eclipse中的一個插件來生成Hibernate映射文件,因爲我有很多要映射的類和表。然而,當我運行應用程序,我剛纔出現以下情況例外:java.lang.ClassCastException:org.hibernate.type.StringType不能轉換爲org.hibernate.type.VersionType

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> 

不過,我不確定,如果這不是解決方案,我不想改變所有HBM中的所有類型。任何人都可以幫助我。

非常感謝你提前, 願你有一個愉快的一天

<property name="userdefinedrole" type="string"> 
    <column name="USERDEFINEDROLE" /> 
</property> 
+0

您確定這是導致該異常的類嗎?其他實體的映射文件如何?你在某個地方使用某個版本還是使用了一個名爲'version'的屬性? – Thomas 2013-02-28 10:47:30

+0

我正在尋找任何屬性或稱爲「版本」的字段,但唯一發現的是<?xml version =「1.0」?> – 2013-02-28 10:56:34

+0

您是否使用註釋以及該類包含一個字段那個名字? – Thomas 2013-02-28 11:13:49

回答

0

我已經多次檢查所有的映射類

0

缺少長度字段。最後,問題來自映射類沒有適當的屬性類型... :( 感謝您的回覆

+0

我認爲長度並不重要,因爲在java類中,屬性是一個沒有長度的字符串,問題是關於投射。解決方案,它不起作用。 – 2013-02-28 10:52:51

10

在我的情況下,我從DB生成的實體和一些實體列名稱有「版本「。這個名稱的生成器添加了」@Version「註釋,但是此列類型是字符串 - 對於@Version註釋不可接受

相關問題