@Modifying
@Query("delete from Task task where task.user.id=?1")
void deleteByUserId(Long id);
出现Executing an update/delete query的原因是没有事务
处理事务可以采用两种方法:
第一种直接:
@Modifying@Transactional
@Query("delete from Task task where task.user.id=?1")
void deleteByUserId(Long id);
在后面加上 @Transactional让spirng来管理事务
第二种可以采用AOP声明式事务来管理:
<tx:advice id="dao" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="deleteByUserId*" read-only="false"/>
<!--hibernate4必须配置为开启事务 否则 getCurrentSession()获取不到session-->
<tx:method name="*" propagation="REQUIRED" /><!-- 他就是允许所有的方法都有session <tx:method name="*" propagation="REQUIRED" />-->
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut id="daoMethods" expression="execution(* com.hblb.develop.repository..*.*(..))"/><!--第二种 expression="execution(* com.service.*.*(..))" 。。代表service下的所有 -->
<aop:advisor advice-ref="dao" pointcut-ref="daoMethods" />
</aop:config>
这样就可以解决没有事务而出现的InvalidDataAccessApiUsageException: Executing an update/delete query