我正在尝试Spring 3(.0.2.RELEASE)和JPA2和Hibernate 3.5.1-Final ... 有一件事让我不高兴,那就是Spring似乎只接受一个事务管理器名为“ transactionManager“当transactionManager没有被命名为“transactionManager”
如果我没有将其命名为”transactionManager“,Spring将抛出NoSuchBeanDefinitionException:没有定义名为'transactionManager'的bean'。
这里是我的配置:
<context:component-scan base-package="destiny.data.mining"/>
<context:annotation-config/>
<bean id="miningEntityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="persistenceUnitName" value="mining"/>
</bean>
<bean id="miningTransactionManager" class="org.springframework.orm.jpa.JpaTransactionManager" >
<property name="entityManagerFactory" ref="miningEntityManagerFactory"/>
</bean>
<tx:advice id="txAdviceMining" transaction-manager="miningTransactionManager">
<tx:attributes>
<tx:method name="get*" read-only="true"/>
<tx:method name="save*" propagation="REQUIRED"/>
<tx:method name="update*" propagation="REQUIRED"/>
<tx:method name="delete*" propagation="REQUIRED"/>
<tx:method name="*" propagation="SUPPORTS" read-only="true"/>
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut id="methods" expression="execution(* destiny.utils.AbstractDao+.*(..))"/>
<aop:advisor advice-ref="txAdviceMining" pointcut-ref="methods"/>
</aop:config>
<tx:annotation-driven transaction-manager="miningTransactionManager"/>
在这种配置,实体管理器工厂是不一定名为 “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);
}
}
谢谢!它解决了! – smallufo 2010-06-12 05:03:53
但是我仍然担心DAO是否被注入到其他框架(如Wicket)中,它是否仍然能够将@TransactionConfiguration添加到检票的组件中? – smallufo 2010-06-12 05:11:42
您必须尝试一下才能确定,但我*认为*在“真实”上下文中,您不需要任何注释 - Spring将根据bean id查找正确的transactionManager。如果你可以在这里发布你的结果以便后人看到,那将会很棒。 – 2010-06-12 05:14:35