Мы обновляем наш проект с Hibernate 3.6.10 до Hibernate 5.2.0, но получаем ошибки при переносе. Я прочитал много сообщений здесь о StackOverFlow и Google, но не нашел никакого решения.Hibernate5, Spring 4 - org.hibernate.HibernateException: не удалось получить синхронизированный с транзакцией сеанс для текущего потока
Рассмотрите ссылку на код this website. Я только сделал подключения к базе данных: База данных PostgreSQL.
Если я запустил этот образец после добавления этих JAR (ALL Added JAR files screenshot), за исключением спящего режима JAR 3.6.10-final, он работает полностью нормально. Но если бы я сделать эти изменения в спящий режим 5 обновления:
- Изменение файла JAR добавлен в Hibernate-ядро-5.2.1-Final.jar
- Изменение ссылка hibernate3 файлов hibernate5 (3 замены; 1 в EmployeeDao импорт и еще 2 в applicationContext.xml)
Он выдает следующее сообщение об ошибке:
Exception in thread "main" org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-only mode (FlushMode.MANUAL): Turn your Session into FlushMode.COMMIT/AUTO or remove 'readOnly' marker from transaction definition.
at org.springframework.orm.hibernate5.HibernateTemplate.checkWriteOperationAllowed(HibernateTemplate.java:1132)
at org.springframework.orm.hibernate5.HibernateTemplate$12.doInHibernate(HibernateTemplate.java:618)
at org.springframework.orm.hibernate5.HibernateTemplate$12.doInHibernate(HibernateTemplate.java:615)
at org.springframework.orm.hibernate5.HibernateTemplate.doExecute(HibernateTemplate.java:340)
at org.springframework.orm.hibernate5.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:307)
at org.springframework.orm.hibernate5.HibernateTemplate.save(HibernateTemplate.java:615)
at hibernate.test.EmployeeDao.saveEmployee(EmployeeDao.java:12)
at hibernate.test.InsertTest.main(InsertTest.java:21)
и я сделал эти изменения, как хорошо, но получил ту же ошибку:. Комментируя это EmployeeDao:
/*HibernateTemplate template;
public void setTemplate(HibernateTemplate template) {
this.template = template;
} */
и расширение HibernateDaoSupport, так что это дает SessionFactory сеттера.
И замена ниже кода:
public void saveEmployee(Employee e){
template.save(e);
}
это:
public void saveEmployee(Employee e){
this.getHibernateTemplate().save(e);
}
После отладки я узнал, что в классе HibernateTemplate предоставляемых Spring-ОРМ-4.3.1 Jar бросает упомянутый ошибка.
Может кто-нибудь помочь мне с этим: O. Мы застряли здесь целую вечность. Я ценю помощь.
Ссылки на ссылки выше: или рис 2 Http: //i.stack.imgur.com/NwPwl.png для pic 3- http://i.stack.imgur.com/Zgx5d.png – JavaDeveloper
Прежде всего, я бы отказался использовать 'HibernateTemplate'. Обратитесь к этому вопросу http://stackoverflow.com/questions/4067775/spring-hibernate-template-when-to-use-and-why. Прочтите принятый ответ. Вам нужно перейти с HibernateTemplate на SessionFactory и декларативное управление транзакциями. –
@ TheCoder Спасибо за ваш ответ. Здесь, в проекте, он настолько огромен, и любая новая реализация может занять много времени. Я прошел через упомянутую нить, и они говорят, что она удалена из Весны? но я использую это через import. org.springframework.orm.hibernate5.HibernateTemplate'. В любом случае, пожалуйста, ответьте на вышеуказанный вопрос, если это возможно, это все, что мне нужно. Спасибо. – JavaDeveloper