删除查询执行的TransactionRequiredException

时间:2014-01-30 11:05:02

标签: spring jpa spring-data-jpa jta

执行删除查询时,我发生了一种奇怪的行为。我使用spring mvc 3.1和JPA(hibernate)和oracle DB。 以下是我的applicationcontext的相关部分

    <bean class="org.springframework.orm.jpa.JpaTransactionManager" id="transactionManager">
    <property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>

<tx:annotation-driven mode="aspectj" transaction-manager="transactionManager"/>

<bean class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" id="entityManagerFactory">
    <property name="persistenceUnitName" value="persistenceUnit"/>
    <property name="dataSource" ref="dataSource"/>
</bean>

我创建了一个自定义注释

@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Transactional(isolation = Isolation.DEFAULT, propagation=Propagation.REQUIRED)
public @interface DefaultServiceTransaction{}

我在服务上使用它来使它们成为事务性的。

@Service
@DefaultServiceTransaction
public class UserServiceImpl implements UserService {
@Autowired   UserRepositoryuserRepository;
@DefaultServiceTransaction
public void deleteAllForUser(User user){
userRepository.deleteAllForUser(user);
}}

问题是当我执行这个服务方法时,我得到了异常

org.springframework.dao.InvalidDataAccessApiUsageException: Executing an update/delete     query; nested exception is javax.persistence.TransactionRequiredException: Executing an update/delete query
at org.springframework.orm.jpa.EntityManagerFactoryUtils.convertJpaAccessExceptionIfPossible(EntityManagerFactoryUtils.java:321)
at org.springframework.orm.jpa.aspectj.JpaExceptionTranslatorAspect.ajc$afterThrowing$org_springframework_orm_jpa_aspectj_JpaExceptionTranslatorAspect$1$18a1ac9(JpaExceptionTranslatorAspect.aj:15)

当我将其用于其他服务(实际上在同一个包中)时,同样的策略对我有用 - 所以我认为问题与配置无关。 我很无能......

0 个答案:

没有答案