为何spring声明式事务无作用?
为何spring声明式事务无作用?
//为何log中没有spring 动态代理的信息,有事务回滚信息?数据库中还是更新了test表中的字段
@Repositorypublic class BaseHibernateDao extends HibernateDaoSupport {}@Servicepublic class TestService extends BaseService { @Autowired TestDao testDao; public void testTT(){ testDao.testTT(); }}@Servicepublic class TestDAO extends BaseHibernateDao{ public void testTT(){ String hql = " update Test set age= ? where id = 1000 "; Query q = this.getSession(true).createQuery(hql); q.setInteger(0, 3333333); q.executeUpdate(); Test n = new Test(); n.setAddtime( new Date() ); n.age( new Long(101) ); n.setDatastr("22222222222"); n.setPid( Long.parseLong("sssssssssssss") ); //此处故意throw RuntimeException子类 session.save(n); //为何log中没有spring 动态代理的信息,有事务回滚信息?数据库中还是更新了test表中的字段 }}
mgr的顯示類
@Component
public class ContractTypeManagerImp implements ContractTypeManager {
private ContractTypeDao contractTypeDao;
@Autowired
public void setContractTypeDao(ContractTypeDao contractTypeDao) {
this.contractTypeDao = contractTypeDao;
}
@Transactional
public void delete(LoginUserBO loginUser, ContractTypeBO contractTypeBO)
throws ApplicationException {
ContractTypeBO bo = contractTypeDao.get(loginUser, contractTypeBO.getUid());
contractTypeDao.delete(loginUser, bo);
}
、。。。。。。。。
[解决办法]
用这个配置文件吧
<!-- 事务管理器 -->
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<!-- 事务拦截器 -->
<bean id="transactionInterceptor"
class="org.springframework.transaction.interceptor.TransactionInterceptor">
<!-- 事务管理器 -->
<property name="transactionManager" ref="transactionManager" />
<property name="transactionAttributes">
<props>
<prop key="find*">PROPAGATION_REQUIRED</prop>
<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="load*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="create*">
PROPAGATION_REQUIRED</prop>
<prop key="delete*">
PROPAGATION_REQUIRED</prop>
<prop key="del*">
PROPAGATION_REQUIRED</prop>
<prop key="update*">
PROPAGATION_REQUIRED</prop>
<prop key="start*">
PROPAGATION_REQUIRED</prop>
<prop key="cancel*">
PROPAGATION_REQUIRED</prop>
<prop key="stop*">
PROPAGATION_REQUIRED</prop>
<prop key="save*">
PROPAGATION_REQUIRED</prop>
<prop key="add*">
PROPAGATION_REQUIRED</prop>
<prop key="update*">
PROPAGATION_REQUIRED</prop>
<prop key="remove*">
PROPAGATION_REQUIRED</prop>
<prop key="pay*">
PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
希望能帮助到你.
[解决办法]
可以回滚?看不到回滚信息?是不是log4j配置有问题,这是我的配置
# Configure logging for testing: optionally with log file
log4j.rootLogger=DEBUG, stdout
# log4j.rootLogger=WARN, stdout, logfile
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
log4j.appender.logfile=org.apache.log4j.FileAppender
log4j.appender.logfile.File=target/spring.log
log4j.appender.logfile.append=false
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n
[解决办法]
up