当transactionManager未命名为“transactionManager”时
我正在尝试Spring 3(.0.2.RELEASE)和JPA2和Hibernate 3.5.1-Final …有一点让我感到不安的是,spring似乎只接受一个名为“transactionManager”的事务管理器
如果我没有将它命名为“transactionManager”,Spring将抛出NoSuchBeanDefinitionException:没有定义名为’transactionManager’的bean 。
这是我的配置:
在此配置中,实体管理器工厂不一定命名为“entityManagerFactory”,“txAdvice” 也不一定命名为“txAdvice”。 但我不知道为什么Spring上需要一个名为“transactionManager”的事务管理器?
有没有办法不将事务管理器命名为“transactionManager”? (我正在运行多个spring配置文件,所以我尽量避免名称冲突)
测试代码:
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations={"classpath:mining.xml"}) public class MiningPersonDaoTest { @Inject private EntityManagerFactory miningEntityManagerFactory; @Inject private MiningPersonDao miningPersonDao; @Transactional @Test public void testUpdate() { MiningPerson p = miningPersonDao.get(42L); p.setLocationName("OOXX"); miningPersonDao.update(p); System.out.println(p); } }
我的理解是,在unit testing( TransactionalTestExecutionListener
)的上下文中, 不使用以其他方式查找事务管理器的代码( TransactionInterceptor#determineTransactionManager
)。
您可以尝试使用@TransactionConfiguration
注释您的测试类,该transactionManager
接受transactionManager
属性。 不是最优雅的方式,但可能是暂时的最佳选择。
今天,当我尝试Spring-Data JPA的非常简单的例子时,我遇到了同样的问题。 我给了事务管理器“dmTransactionManager”自定义名称。 要解决它我必须指定它,我必须指定如下: