Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

JpaRepository Not supported for DML operations [delete query]

I have written a query to delete some objects in my interface extending JPaRepository, but when I execute the query it throws an exception! Can anyone explain it for me?

Query:

public interface LimitRepository extends JpaRepository<CLimit, Long> {    @Query("delete from CLimit l where l.trader.id =:#{#trader.id}")   void deleteLimitsByTrader(@Param("trader") CTrader trader);  } 

I got this error, can anyne Please, explain this for me, and thank you all :)

Exception:

  org.hibernate.hql.internal.QueryExecutionRequestException: Not supported for DML operations [delete from com.query.domain.CLimit l where l.trader.id =:__$synthetic$__1]       at org.hibernate.hql.internal.ast.QueryTranslatorImpl.errorIfDML(QueryTranslatorImpl.java:318)       at org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:369)       at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:236)       at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1300)       at org.hibernate.internal.QueryImpl.list(QueryImpl.java:103)       at org.hibernate.jpa.internal.QueryImpl.list(QueryImpl.java:573)       at org.hibernate.jpa.internal.QueryImpl.getSingleResult(QueryImpl.java:495)       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:498)       at org.springframework.orm.jpa.SharedEntityManagerCreator$DeferredQueryInvocationHandler.invoke(SharedEntityManagerCreator.java:364)       at com.sun.proxy.$Proxy98.getSingleResult(Unknown Source)       at org.springframework.data.jpa.repository.query.JpaQueryExecution$SingleEntityExecution.doExecute(JpaQueryExecution.java:206)       at org.springframework.data.jpa.repository.query.JpaQueryExecution.execute(JpaQueryExecution.java:78)       at org.springframework.data.jpa.repository.query.AbstractJpaQuery.doExecute(AbstractJpaQuery.java:102)       at org.springframework.data.jpa.repository.query.AbstractJpaQuery.execute(AbstractJpaQuery.java:92)       at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.doInvoke(RepositoryFactorySupport.java:482)       at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.invoke(RepositoryFactorySupport.java:460)       at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)       at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:61)       at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)       at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99)       at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:281)       at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)       at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)       at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:136)       at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)       at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:133)       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:208)       at com.sun.proxy.$Proxy88.deleteLimitsByTrader(Unknown Source)       at com.query.service.impl.LimitServiceImpl.deleteLimitsByTrader(LimitServiceImpl.java:138)       at com.query.controller.UserController.deleteUser(UserController.java:96)       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:498)       at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:222)       at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137)       at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110)       at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:814)       at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:737)       at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)       at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959)       at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893)       at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:969)       at org.springframework.web.servlet.FrameworkServlet.doDelete(FrameworkServlet.java:893)       at javax.servlet.http.HttpServlet.service(HttpServlet.java:656)       at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:845)       at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)       at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)       at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)       at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)       at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)       at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)       at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:316)       at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:126)       at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:90)       at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)       at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:114)       at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)       at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:122)       at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)       at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:111)       at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)       at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:169)       at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)       at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:48)       at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)       at org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilterInternal(BasicAuthenticationFilter.java:158)       at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)       at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)       at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:205)       at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)       at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:120)       at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)       at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:64)       at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)       at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)       at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:53)       at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)       at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)       at org.springframework.security.web.session.ConcurrentSessionFilter.doFilter(ConcurrentSessionFilter.java:133)       at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)       at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:91)       at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)       at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:213)       at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:176)       at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)       at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:262)       at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)       at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)       at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:221)       at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)       at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)       at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)       at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)       at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956)       at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)       at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:436)       at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1078)       at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:625)       at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318)       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)       at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)       at java.lang.Thread.run(Thread.java:745) 
like image 286
Student Avatar asked May 17 '17 10:05

Student


People also ask

How do I delete a Repository in JPA?

The delete() method is used to delete a single entity which we pass as request data and it is available in CrudRepository interface. The CrudRepository extends Repository interface. In Spring Data JPA Repository is top-level interface in hierarchy.

What is JpaRepository used for?

JpaRepository. JpaRepository is particularly a JPA specific extension for Repository. It has full API CrudRepository and PagingAndSortingRepository. So, basically, Jpa Repository contains the APIs for basic CRUD operations, the APIS for pagination, and the APIs for sorting.


1 Answers

Try this:

public interface LimitRepository extends JpaRepository<CLimit, Long> {    @Transactional   @Modifying   @Query("delete from CLimit l where l.trader.id =:#{#trader.id}")   void deleteLimitsByTrader(@Param("trader") CTrader trader);  } 

Whenever you are trying to modify a record in db, you have to mark it @Transactional as well as @Modifying, which instruct Spring that it can modify existing records.

The modifying queries can only use void or int/Integer as return type, otherwise it will throw an exception.

like image 179
Afridi Avatar answered Oct 13 '22 06:10

Afridi