0

これは、Spring 4.1.9.RELEASE、Spring-Data 1.11.4.RELEASE、Spring 統合された Javars 1.6.0 にあります。

そのため、Spring を使用して@JaversAuditable、挿入しようとしたときに例外が処理された場合 (重複キー例外など)、JaversTransactionalDecorator引き続き先に進み、コミットを生成しようとすることがわかりました。

ただし、挿入が失敗したためにエンティティに ID がないため、Javars は例外をスローしてしまいます (以下を参照)。デバッグをステップ実行するorg.springframework.aop.aspectjAspectJAfterAdvice.invoke()と、finally ブロックに行き着くことがわかりました。次に、 を呼び出します。invokeAdviceMethod(JoinPointMatch,null,null)その 3 番目nullは のスポットですThrowable

http://docs.spring.io/spring/docs/4.1.9.RELEASE/spring-framework-reference/html/aop.htmlによると@After、メソッドが正常に存在するか、または例外。したがって、Javars は、例外がスローされたかどうかを検出できる必要があるように思えます。または@AfterReturning、別の@AfterThrowing. @After現在、Javers が ( ) 例外/throwable がスローされたかどうかを検出する方法を見つけようとしてorg.javers.spring.auditable.aspect.JaversAuditableRepositoryAspect.commitAdvice(JoinPoint pjp)いますが、それに関するドキュメントには何も見つからないようです。

それで、これはJavarsがすでに持っているものですが、何らかの理由でスローされたSQL例外を正しく検出していませんか、またはスローさ@Afterれた例外/スロー可能なものをアドバイスで検出するための情報はどこにありますか?

申し訳ありませんが、非常に整理されていない可能性があります。通常より数時間遅れてここにいます。

Caused by: org.javers.common.exception.JaversException: ENTITY_INSTANCE_WITH_NULL_ID Found Entity instance of class 'com.findology.api.model.publisher.Publisher' with null id
at org.javers.core.metamodel.type.EntityType.getIdOf(EntityType.java:96)
at org.javers.core.metamodel.object.InstanceId.createFromInstance(InstanceId.java:28)
at org.javers.core.metamodel.object.GlobalIdFactory.createId(GlobalIdFactory.java:47)
at org.javers.core.graph.LiveCdoFactory.create(LiveCdoFactory.java:24)
at org.javers.core.graph.LiveCdoFactory.create(LiveCdoFactory.java:9)
at org.javers.core.graph.EdgeBuilder.asCdo(EdgeBuilder.java:39)
at org.javers.core.graph.ObjectGraphBuilder.buildGraph(ObjectGraphBuilder.java:45)
at org.javers.core.graph.LiveGraphFactory.createLiveGraph(LiveGraphFactory.java:39)
at org.javers.core.commit.CommitFactory.create(CommitFactory.java:76)
at org.javers.core.JaversCore.commit(JaversCore.java:70)
at org.javers.spring.jpa.JaversTransactionalDecorator.commit(JaversTransactionalDecorator.java:52)
at org.javers.spring.jpa.JaversTransactionalDecorator$$FastClassBySpringCGLIB$$acb40bd0.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:718)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
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.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:653)
at org.javers.spring.jpa.JaversTransactionalDecorator$$EnhancerBySpringCGLIB$$c6591394.commit(<generated>)
at org.javers.spring.auditable.aspect.JaversCommitAdvice.commitMethodArguments(JaversCommitAdvice.java:24)
at org.javers.spring.auditable.aspect.JaversAuditableRepositoryAspect.commitAdvice(JaversAuditableRepositoryAspect.java:48)
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.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:621)
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:603)
at org.springframework.aop.aspectj.AspectJAfterAdvice.invoke(AspectJAfterAdvice.java:46)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:168)
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.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:653)
at com.findology.api.dao.PublisherDao$$EnhancerBySpringCGLIB$$8ba00510.insert(<generated>)
at com.findology.api.controller.SimpleController.createPublisher(SimpleController.java:82)
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:775)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:705)
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:965)
... 74 common frames omitted
4

2 に答える 2

0

そうです、アドバイスされているリポジトリメソッドから例外がスローされた場合、@JaversAuditable は javars.commit() を呼び出すべきではありません。JaVersでこれを修正するPRを思いつくことができますか(「成功時」のポイントカットを使用して、おそらくあなたが言及したように@AfterReturning)?

于 2016-04-07T09:04:40.663 に答える
0

したがって、最終的な解決策は、Spring ドキュメントに従って @AfterReturning を使用するように変更されており、https://github.com/javers/javers/pull/356に従って受け入れられる過程にあるため、将来のバージョンには修正が組み込まれる予定です。

于 2016-04-13T19:58:59.443 に答える