java - JPA查询问题

标签 java spring jpa

当我的作业运行时出现以下错误,但我不知道为什么它不起作用我想知道我应该做什么

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:410)
    at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:223)
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:417)
    at org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:59)
    at org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:213)
    at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:147)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
    at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodIntercceptor.invoke(CrudMethodMetadataPostProcessor.java:122)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
    at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207)
    at com.sun.proxy.$Proxy463.deleteOlderThan(Unknown Source)
    at com.xxx.jobs.PurgeJob.purgeRepo(PurgeJob.java:117)
    at com.xxx.jobs.PurgeJob.purgeClusterMetrics(PurgeJob.java:110)
    at com.xxx.jobs.PurgeJob.purge(PurgeJob.java:41)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:65)
    at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

这是配置

 <bean id="ofmTransactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
      <property name="entityManagerFactory" ref="ofmEntityManagerFactory" />
 </bean>
 <tx:annotation-driven mode="aspectj" transaction-manager="ofmTransactionManager" />
 <context:annotation-config/> 
 <context:component-scan base-package="com.xxx.dao"/>

存储库代码

@Modifying
@Query(value = "DELETE FROM ObjectName m\n" +
        "WHERE m.createdAt < :date")
void deleteOlderThan(@Param("date")Date date);

代码的使用

@Transactional
private void purgeRepo(MetricRepository repo, Integer days) {
    LocalDate date = new LocalDate().minusDays(days);
    repo.deleteOlderThan(date.toDate());
}

最佳答案

我将 @Transactional 移至存储库代码,并且成功了。

关于java - JPA查询问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32232464/

相关文章:

java - 使用 Exception 来防止使用不需要的参数实例化类是一个好习惯吗

Java 让 JDialog 监听,直到用户点击 JButton

java - 属性和环境始终为空

java - 为 SPA 前端配置 Spring Boot

java - 使用什么: JPQL or Criteria API?

java - JPA:持久数据同步,需要建议

hibernate - 我应该如何覆盖具有复合主键的实体中的 equals/hashCode?

java - spring hibernate配置默认使用resource_local还是jta?

java - Spring Batch Job的集成测试失败

java - Spring中从xml转换为json时如何更改内容?