1

我在xml有一个事务管理器豆如下:如何做到事务管理,而无需使用@Transactional注解

<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager"> 
    <property name="sessionFactory" ref="sessionFactory"/> 
</bean> 

和会话工厂和数据源豆类:

<bean id="dataSource" class="oracle.jdbc.pool.OracleDataSource" destroy-method="close"> 
    <property name="URL" value="jdbc:oracle:thin:@localhost:1521:XE"/> 
    <property name="user" value="user"/> 
    <property name="password" value="password"/> 
</bean> 

<!-- Hibernate SessionFactory --> 

<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 

与会议工厂拥有所有hbm文件映射。

现在我有一个UserAddressManagerImpl如下:

public class UserAddressManagerImpl implements UserAddressManager{ 
// methods to read and write in the database 
} 

和这个bean是:

<bean id="userAddressManager" class="com.sodiz.service.impl.UserAddressManagerImpl"> 

现在,这UserAddressManagerImpl没有它@Transactional

每当我从这个类中进行任何读取操作时,它都能正常工作,但是在进行写入操作时会失败。

我正在使用这个类打包在一个罐子里。所以我不想改变这个班级。

那么,有什么方法可以在不使用@Transactional注释的情况下执行读写操作吗?

+0

您是否尝试过使用xml配置? https://stackoverflow.com/questions/36917842/spring-transactional-configuring-xml –

回答

1

你将不得不使用方面来实现这一目标而无需使用注释:

<bean id="transactionManager" 
    class="org.springframework.orm.hibernate4.HibernateTransactionManager"> 
    <property name="sessionFactory" ref="sessionFactory"/> 
</bean> 

<bean id="userAddressManager" class="com.sodiz.service.impl.UserAddressManagerImpl"/> 

<tx:advice id="txAdvice" transaction-manager="txManager"> 
     <tx:attributes> 
      <tx:method name="get*" read-only="true"/> 
      <tx:method name="find*" read-only="true"/> 
      <tx:method name="*"/> 
     </tx:attributes> 
</tx:advice> 

<aop:config> 
    <aop:pointcut id="userAddressManagerOperation" 
     expression="execution(* com.sodiz.service.impl.UserAddressManagerImpl.*(..))"/> 
    <aop:advisor advice-ref="txAdvice" pointcut-ref="userAddressManagerOperation"/> 
</aop:config> 

当然,这样在你的包每个服务适用于上述事务设置,你可以使用更多的wilcards。

+0

我试过这个解决方案后,添加了POM依赖。现在它给了我一个java.lang.VerifyError的错误。代码结束的下降。 – Tarun

+0

确保您在beans标记中定义了以下内容:xmlns:aop =“http://www.springframework.org/schema/aop” xmlns:tx =“http://www.springframework.org/schema/tx “ –

+0

我在我的beans标记中已经有xmlns:aop =”http://www.springframework.org/schema/aop“ 和xmlns:tx =”http://www.springframework.org/schema/tx“ – Tarun

相关问题