2017-12-02 8 views
0

午後、Hibernate/JPA Updateクエリが失敗します

このクエリが例外を出す理由がわかりません。

コード

@PUT 
@Path("/process") 
@Consumes(MediaType.APPLICATION_JSON) 
public Response processEreturn(List<Long> ereturns){ 

    EntityManager em = Utils.initEntityManager(); 

    Query q = em.createQuery("UPDATE ereturn e SET e.processedByShipper = true WHERE e.id = 111713"); 

    q.executeUpdate(); 

    return Response.ok().build(); 
} 

Excepion

SEVERE: Servlet.service() for servlet [jersey-servlet] in context with path [/returnitRest] threw exception [javax.persistence.TransactionRequiredException: Executing an update/delete query] with root cause 
javax.persistence.TransactionRequiredException: Executing an update/delete query 
    at org.hibernate.query.internal.AbstractProducedQuery.executeUpdate(AbstractProducedQuery.java:1492) 
    at returnitRest.EreturnResource.processEreturn(EreturnResource.java:954) 
    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.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory.lambda$static$0(ResourceMethodInvocationHandlerFactory.java:76) 
    at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:148) 
    at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:191) 
    at org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$ResponseOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:200) 
    at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:103) 
    at org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:493) 
    at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:415) 

thank you very much 

答えて

0

私の悪い、私はトランザクションを開始するのを忘れました。

このソリューション:

@PUT 
@Path("/process") 
@Consumes(MediaType.APPLICATION_JSON) 
public Response processEreturn(List<Long> ereturns){ 

    EntityManager em = Utils.initEntityManager(); 
    em.getTransaction().begin(); 

    Query q = em.createQuery("UPDATE ereturn e SET e.processedByShipper = true WHERE e.id = 111713"); 

    q.executeUpdate(); 

    em.getTransaction().commit(); 
    em.close(); 

    return Response.ok().build(); 
} 
関連する問題