2010-07-12 56 views
0

我在我的Java應用程序的DAO層下面的方法:破碎休眠保存方法

public void save(Employee emp) { 
    System.out.println("emp type: " + emp.getClass().getName); 
    getHibernateTemplate().save(emp); 
    System.out.println("object saved!"); 
    System.out.flush(); 
} 

Employee類不能從任何其他類擴展,並具有以下HBM文件:

<hibernate-mapping>  
<class name="org.myCompany.Employee" table="employee"> 
<!-- fields omitted to save space --> 
</hibernate-mapping> 

然而,插入失敗並帶有java.lang.ClassCastException。起初,我還以爲出事了與我的映射(如一個整數的映射到一個布爾值),但後來我打開Hibernate的show_sql調試,發現我的日誌文件如下:

EMP類型:org.myCompany。員工
休眠:插入到客戶 (......)值(......)
java.lang.ClassCastException

爲什麼會選擇一個完全隨機的表中插入成?我確信我必須有一些配置文件配置錯誤,但我不知道哪一個。我檢查了以下內容:

  • 的applicationContext-hibernate.xml - >兩個客戶和員工的對象映射到正確的HBM文件
  • 沒有客戶或員工有繼承關係(甚至沒有一個共同的父類如Person或User)

我還能試試嗎?

+1

查看完整的曲目。 – axtavt 2010-07-12 15:10:17

回答

0

在調用的類,我有以下兩個調用:

UserDAO.saveCustomer(customer); 
UserDAO.saveEmployee(employee); 

我想客戶對象正確保存。我甚至在這兩個調用和打印的調試方法之間放了一條調試語句。但是,註釋UserDAO.saveCustomer行解決了問題。這讓我更仔細地檢查客戶對象,發現它是腐敗的(錯誤的類別)。 Hibernate必須緩存插入語句,直到事務完成。

所以這個問題現在已經解決了。

+0

您應該編輯您的問題,而不是通常發佈答案 – 2010-07-12 18:32:26