我正在嘗試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