对于初学者,您实际上
EntityManager在不工作的测试用例中使用两种不同的方法:
EntityManager
通过Spring自动连接到您的测试中(这是单例,无论如何都应避免使用),其他是EntityManager
由EntityManagerFactory
您的ApplicationConfiguration中的配置创建。
同时,
EntityManagers由于Hibernate的配置,您还将在上述2旁边运行另一个Session
SessionFactory。另外,由于配置了
HibernateTransactionManager,所有由创建的事务
@Transactional都绑定到由存储库创建
SessionFactory和
EntityManager使用的Hibernate会话,因此肯定无法了解它。这就是为什么
TransactionRequiredException在您的存储库尝试保留数据时引发的原因。
要解决此问题,
您可以考虑删除HibernateSessionFactory
,并将事务管理器切换为
JpaTransactionManager。然后,
@Transactional在您的存储库上将具有创建新事务并将其绑定
EntityManager到Spring已知的现有事务的作用。
值得一提的是,
@Transactional您的TestClass上的完全没有帮助,因为此类的实例没有由Spring实例化和管理。为了使这项工作有效,需要按如下所述提供正确的事务测试类配置:http :
//docs.spring.io/spring/docs/current/spring-framework-
reference/html/testing.html。
希望这可以帮助。



