Сломанный Hibernate Сохранить метод - PullRequest
0 голосов
/ 12 июля 2010

У меня есть следующий метод в слое DAO моего Java-приложения:

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.Сначала я думал, что с моим отображением что-то не так (например, отображение целых чисел на логическое значение), но затем я включил отладку show_sql в hibernate и обнаружил следующее в моем файле журнала:

emp type: org.myCompany.EmployeeHibernate: вставьте в значения клиента (.......) (......)java.lang.ClassCastException

Почему он выбрал совершенно случайную таблицу для вставки?Я уверен, что у меня должен быть какой-то конфигурационный файл, неправильно настроенный, но я не знаю, какой именно.Я проверил следующее:

  • applicationContext-hibernate.xml -> объекты Customer и Employee сопоставлены с их правильными файлами hbm
  • ни Customer, ни Employee не имеют отношения наследования (тамэто даже не общий родительский класс, такой как Person или User)

Что еще я могу попробовать?

1 Ответ

0 голосов
/ 12 июля 2010

В классе вызовов у меня есть два следующих вызова:

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

Я думал, что объект клиента сохраняется правильно.Я даже поместил оператор отладки между двумя вызовами и напечатанным методом отладки.Однако комментирование строки UserDAO.saveCustomer устранило проблему.Это заставило меня более внимательно изучить объект клиента, и я обнаружил, что он поврежден (неправильный класс).Hibernate, должно быть, кэшировал оператор вставки до завершения транзакции.

Так что теперь эта проблема решена.

...