首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当transactionManager未命名为"transactionManager“时

当transactionManager未命名为"transactionManager“时
EN

Stack Overflow用户
提问于 2010-06-12 04:42:11
回答 1查看 6.8K关注 0票数 5

我正在尝试Spring 3(.0.2.RELEASE)和JPA2以及Hibernate 3.5.1-Final.让我感到不安的是,spring似乎只接受一个名为"transactionManager“的事务管理器

如果我不把它命名为"transactionManager“,那么Spring将抛出名为'transactionManager'的。

这是我的配置:

代码语言:javascript
复制
<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配置文件,因此我尽量避免名称冲突)

测试代码:

代码语言:javascript
复制
@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);
  }
}
EN

回答 1

Stack Overflow用户

发布于 2013-06-30 15:49:26

今天,我在尝试的非常简单的例子时遇到了同样的问题。我给事务管理器指定了自定义名称"dmTransactionManager“。要修复它,我必须指定它,我必须如下所示:

代码语言:javascript
复制
<jpa:repositories base-package="com.my.repository" transaction-manager-ref="dmTransactionManager"/>
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3027511

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档