我正在尝试Spring 3(.0.2.RELEASE)和JPA2和Hibernate 3.5.1-Final ……
令我不安的是,spring似乎只接受名为“transactionManager”的事务管理器
如果我没有将它命名为“transactionManager”,Spring将抛出NoSuchBeanDeFinitionException:没有定义名为’transactionManager’的bean.
这是我的配置:
fig/>
factorybean">
required"/>
required"/>
required"/>
在此配置中,实体管理器工厂不一定命名为“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);
}
}
最佳答案
我的理解是,在单元测试(
TransactionalTestExecutionListener
)的上下文中,不使用以其他方式查找事务管理器的代码(TransactionInterceptor#determineTransactionManager
).
您可以尝试使用@TransactionConfiguration
注释您的测试类,它接受transactionManager属性.不是最优雅的方式,但可能是目前最好的选择.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。