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();
}

雇员类不从任何其他类扩展,并具有以下 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.Employee
休眠:插入客户(.......)值(......)
java.lang.ClassCastException

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

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

我还能尝试什么?

4

1 回答 1

0

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

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

我认为客户对象保存正确。我什至在两个调用之间放置了一个调试语句并打印了调试方法。但是,注释掉 UserDAO.saveCustomer 行解决了这个问题。这让我更仔细地检查了客户对象,我发现它已经损坏(错误的类)。Hibernate 必须一直在缓存插入语句,直到事务完成。

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

于 2010-07-12T17:49:57.307 回答