今天在测试spring任务调度时,突然发现我配的声明事务不起作用了,找了好久才发现不是我的事务的问题,是我在Dao中用了一个方法有问题 方法如下: 
public void updateByIds(final Set<String> updateIds)throws DaoException{ 
try { 
String queryString="update from Yaoyueyingyue y set y.state='2' where y.yaoyueid in (?)"; 
getHibernateTemplate().bulkUpdate(queryString, updateIds.toArray()); 
} catch (Exception e) { 
e.printStackTrace(); 
throw new DaoException(this.getClassName()+e.getMessage()); 
} updateIds是一个包含要更新的编号集合,我发现用这个方法在我Manager中调用Dao事务就不起作用了,后来又改成这样 
public void updateByIds(final Set<String> updateIds)throws DaoException{ 
try { 
  getHibernateTemplate().execute(new HibernateCallback(){ 
       final String hql="update Yaoyueyingyue y set y.state=2 where yaoyueid in (:yaoyueid)"; 
       public Object doInHibernate(Session session) throws HibernateException, SQLException { 
Query query=session.createQuery(hql); 
query.setParameterList("yaoyueid", updateIds); 
query.executeUpdate(); 
return null; 
} }); 
} catch (Exception e) { 
e.printStackTrace(); 
throw new DaoException(this.getClassName()+e.getMessage()); 

} 事务还是不行,这两个方法好像不受spring AOP事务管理,只要执行到这个Dao的方法就自动提交了,出来异常也不能回滚,真是郁闷,小弟对这块不是很明白,为什么事务就不行了呢,希望那位牛人,帮我解释下,谢谢了, 我的spring声明事务大概如下: 
<bean id="atomikosTransactionManager" class="com.atomikos.icatch.jta.UserTransactionManager" init-method="init" destroy-method="close">  
        <property name="forceShutdown"> 
        <value>true</value></property>         
    </bean>  
       
    <bean id="atomikosUserTransaction" class="com.atomikos.icatch.jta.UserTransactionImp">  
        <property name="transactionTimeout" value="300"/>    
    </bean>  
  
    <bean id="springTransactionManager" class="org.springframework.transaction.jta.JtaTransactionManager">  
        <property name="transactionManager"><ref bean="atomikosTransactionManager"  /></property>  
        <property name="userTransaction"><ref bean="atomikosUserTransaction"  /></property>  
    </bean>  
  <aop:config> 
<!-- 
This definition creates auto-proxy infrastructure based on the given pointcut, 
expressed in AspectJ pointcut language. Here: applying the advice named 
"txAdvice" to all methods on classes named PetStoreImpl. 
--> 
<aop:advisor  pointcut="execution(* com.goal.log.manager.*.*(..))" 
advice-ref="txAdvice" /> 
<aop:advisor  pointcut="execution(* com.goal.system.manager.*.*(..))" 
advice-ref="txAdvice" /> 
</aop:config>     <!-- @Transactional 时要使用下面一行 --> 
   <!-- <tx:annotation-driven transaction-manager="springTransactionManager" proxy-target-class="true"/> --> 
<!--  Transaction advice definition, based on method name patterns. 
Defaults to PROPAGATION_REQUIRED for all methods whose name starts with 
"insert" or "update", and to PROPAGATION_REQUIRED with read-only hint 
for all other methods.--> 
<!-- 引用springTransactionManager --> 
<tx:advice id="txAdvice" transaction-manager="springTransactionManager"> 
<tx:attributes> 
   <tx:method name="save*" rollback-for="java.lang.Exception"/> 
   <tx:method name="insert*" rollback-for="java.lang.Exception"/> 
.... 
                       <tx:method name="*" read-only="true" rollback-for="java.lang.Exception"/> 
</tx:attributes> 
</tx:advice>  atomikosTransactionManager这个东西不用管,是一个开源的支持JTA分布式的JAR,希望有人能够为我解答........