📅  最后修改于: 2023-12-03 14:44:57.897000             🧑  作者: Mango
在使用Spring框架中的数据访问对象(DAO)时,可能会遇到以下错误:
org.springframework.beans.factory.BeanCreationException:
Error creating bean with name 'transactionManager' defined in class path resource [applicationContext.xml]:
Invocation of init method failed; nested exception is java.lang.ClassCastException:
org.springframework.orm.jpa.EntityManagerHolder cannot be cast to org.springframework.orm.hibernate5.SessionHolder
这个错误的意思是尝试将Spring框架中的 EntityManager
对象转换为Hibernate框架中的 Session
对象时出现了一个类型转换错误。
通常,这会在使用Spring框架的声明式事务管理器时发生,其中Spring尝试将Hibernate Session
与 EntityManager
提交到底层JDBC事务中。
解决这个错误需要更改你的配置文件。为了解决这个问题,你需要确保在你的Spring配置文件中,使用Hibernate框架的 SessionFactory
Bean,而不是使用JPA框架的 EntityManagerFactory
Bean。
具体来说,将通过以下步骤进行更改:
Session
的地方。SessionFactory
Bean 已经被正确定义,并已经被引入到了配置文件中。transactionManager
Bean 的实例化,使用 Hibernate SessionFactory
来实现,而不是使用 JPA EntityManagerFactory
。如果你正在使用Java Config而不是XML文件,更改步骤类似。你将需要创建一个 SessionFactory
Bean,并在 transactionManager
Bean 中使用它。
更具体地说,你需要做以下步骤:
@Configuration
类中,并确保已经定义了 sessionFactory
Bean。HibernateTransactionManager
Bean并使用 sessionFactory
将其配置为使用Hibernate Session
,而不是JPA EntityManager
。@Transactional
注释。在这些更改完成后,再次运行你的应用程序,应该就不再遇到转换错误了。