-
카테고리
-
세부 분야
백엔드
-
해결 여부
미해결
Auditing transaction
21.10.03 15:18 작성 조회수 156
0
안녕하세요, auditing 강의를 듣고 적용해보았습니다.
게시글을 처음에 만들때 원하는 값들이 잘 들어가지만
게시글을 수정하여 다시 저장할 경우audit 부분에서 createdBy, modifiedBy 를 못가져오면서 transaction 에러를 냅니다..!
혹시 실무에 적용하기 위해 추가로 적용해야 할 부분이 있을까요?
아마 AuditorAwareImpl에서 @Autowired MemberRepository memberRepository; 부분이 이상한 것 같은데...이유는 모르겠습니다 ㅠ_ㅠ
답변을 작성해보세요.
0
김영한
지식공유자2021.10.04
안녕하세요. WON JONGPIL님
어떤 오류가 발생하는지 오류 로그를 남겨주세요.
추가로 오류와 관련된 소스 코드를 최대한 많이 남겨주세요.
감사합니다.
WON JONGPIL
2021.10.06
안녕하세요!
우선 테스트를 설명하자면 , oAuth2.0 google 로그인을 한 상태이고요,
게시물을 작성하였을 때 audit에 따른 createdBy, modifiedBy 이 제대로 작성 된 것을 확인하였습니다.
수정을 할 경우에 문제가 발생합니다.
수정을 할 경우에도 내용 변경없이 수정을 할 경우 아무 문제 없지만
내용을 변경 한 후 저장을 누르면 다음과 같은 에러가 발생합니다
Hibernate: select post0_.id as id1_1_0_, post0_.created_by as created_2_1_0_, post0_.createdDate as createdd3_1_0_, post0_.last_modified_by as last_mod4_1_0_, post0_.modifiedDate as modified5_1_0_, post0_.content as content6_1_0_, post0_.title as title7_1_0_ from Post post0_ where post0_.id=?
2021-10-05 23:47:32.426 ERROR 24008 --- [nio-8888-exec-7] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.transaction.TransactionSystemException: Could not commit JPA transaction; nested exception is javax.persistence.RollbackException: Error while committing the transaction] with root cause
java.lang.StackOverflowError: null
at org.springframework.data.jpa.repository.query.JpaQueryMethod.getParameters(JpaQueryMethod.java:410) ~[spring-data-jpa-2.5.5.jar:2.5.5]
at org.springframework.data.jpa.repository.query.AbstractJpaQuery.doExecute(AbstractJpaQuery.java:154) ~[spring-data-jpa-2.5.5.jar:2.5.5]
at org.springframework.data.jpa.repository.query.AbstractJpaQuery.execute(AbstractJpaQuery.java:143) ~[spring-data-jpa-2.5.5.jar:2.5.5]
at org.springframework.data.repository.core.support.RepositoryMethodInvoker.doInvoke(RepositoryMethodInvoker.java:137) ~[spring-data-commons-2.5.5.jar:2.5.5]
at org.springframework.data.repository.core.support.RepositoryMethodInvoker.invoke(RepositoryMethodInvoker.java:121) ~[spring-data-commons-2.5.5.jar:2.5.5]
at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.doInvoke(QueryExecutorMethodInterceptor.java:159) ~[spring-data-commons-2.5.5.jar:2.5.5]
at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.invoke(QueryExecutorMethodInterceptor.java:138) ~[spring-data-commons-2.5.5.jar:2.5.5]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.10.jar:5.3.10]
at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:80) ~[spring-data-commons-2.5.5.jar:2.5.5]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.10.jar:5.3.10]
at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123) ~[spring-tx-5.3.10.jar:5.3.10]
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388) ~[spring-tx-5.3.10.jar:5.3.10]
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) ~[spring-tx-5.3.10.jar:5.3.10]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.10.jar:5.3.10]
at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137) ~[spring-tx-5.3.10.jar:5.3.10]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.10.jar:5.3.10]
at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:145) ~[spring-data-jpa-2.5.5.jar:2.5.5]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.10.jar:5.3.10]
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) ~[spring-aop-5.3.10.jar:5.3.10]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.10.jar:5.3.10]
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:215) ~[spring-aop-5.3.10.jar:5.3.10]
at com.sun.proxy.$Proxy187.findByEmail(Unknown Source) ~[na:na]
at com.example.demo.config.AuditorAwareImpl.getCurrentAuditor(AuditorAwareImpl.java:30) ~[main/:na]
at java.base/java.util.Optional.map(Optional.java:265) ~[na:na]
at org.springframework.data.auditing.AuditingHandler.getAuditor(AuditingHandler.java:109) ~[spring-data-commons-2.5.5.jar:2.5.5]
at org.springframework.data.auditing.AuditingHandler.markModified(AuditingHandler.java:104) ~[spring-data-commons-2.5.5.jar:2.5.5]
at org.springframework.data.jpa.domain.support.AuditingEntityListener.touchForUpdate(AuditingEntityListener.java:112) ~[spring-data-jpa-2.5.5.jar:2.5.5]
at jdk.internal.reflect.GeneratedMethodAccessor94.invoke(Unknown Source) ~[na:na]
관련 된 코드를 https://github.com/JPWon-1/git-audit-test
에 남겨봅니다
양해 바라는 점은, oAuth를 통한 로그인을 하다보니 application-oauth.yml 파일에
id와 password 부분은 따로 첨부를 하진 못하였습니다..
이와 관련되어 어떤 방식으로 소스코드를 공유하는게 좋은지 알려주신다면 다음엔 그 방법을 참조하여 질문을 남기도록 하겠습니다
김영한
지식공유자2021.10.11
안녕하세요. WON JONGPIL님
링크에 사이트에 접속하니 404가 나옵니다.
추가로 저희가 예제를 직접 실행할 수 있어야 합니다. oauth를 빼고, 가짜 회원 같은 것으로 외부 접속 없이 완전하게 확인해 볼 수 있는 예제를 올려주셔야 도움을 드릴 수 있습니다.
감사합니다.
답변 1