破坏的休眠保存方法

时间:2010-07-12 14:04:02

标签: java hibernate classcastexception

我在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 type:org.myCompany.Employee
  Hibernate:插入客户   (.......)值(......)
  java.lang.ClassCastException

为什么选择一个完全随机的表来插入?我确定我必须配置错误的配置文件,但我不知道哪一个。我检查了以下内容:

  • applicationContext-hibernate.xml - &gt; Customer和Employee对象都映射到正确的hbm文件
  • Customer或Employee都没有继承关系(甚至没有像Person或User这样的公共父类)

我还能尝试什么?

1 个答案:

答案 0 :(得分:0)

在调用类中,我有以下两个调用:

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

我认为客户对象正确保存。我甚至在两个调用之间放置了一个调试语句,并打印了调试方法。但是,注释掉UserDAO.saveCustomer行修复了问题。这使我更仔细地检查客户对象,我发现它是腐败的(错误的类)。 Hibernate必须缓存insert语句,直到Transaction完成。

所以这个问题现在已经解决了。