我有一个带有Hibernate的Spring Boot应用程序,其中有一堆DAO用@Repository
和Spring的@Transactional
注释。一切正常。然后我决定将常用方法(持久化,查找,合并)移动到AbstractDao
。编写操作(持久化,合并)开始抛出No EntityManager with actual transaction available for current thread - cannot reliably process 'persist' call
异常。我尝试将@Transactional
添加到AbstractDao
,与我的期望相反,它修复了它。
为什么会这样?我认为,因为,与CGLIB不同,Spring使用接口而不是扩展类,它不起作用,我需要定义一个接口来声明而不是我的DAO。但我也猜测我正在混合Spring如何处理依赖管理和事务的概念。
有人可以解释为什么会有效吗?有没有更好的方法来处理这个问题?