728x90
반응형
728x90
반응형
728x90
반응형

@Scheduled로 jpa repository의 save 를 이용하는 경우에 발생되었습니다.

 

정확히 문제가 된 부분은 아래 부분인데, 해당 부분에서 세션의 정보를 가져와 작성자를 쓰려고 했던게 문제입니다.

스케줄에 의해 진행되므로 세션이 없죠.

at packageName.core.model.entity.base.BaseModel.preUpdate(BaseModel.java:87)

 

그래서에 해당되는 부분의 save를 사용하지 않고 nativeQuery를 작성하여 처리하도록 변경하였습니다.

(세션정보를 가져오지 않도록 함)

at packageName.core.schedule.service.ScheduleService.removeAttachFileInServer(ScheduleService.java:42)

 

* 참고정보

 

자바에러-no thread-bound request found are you referring to request attributes outside of an actual web

제목이 좀 길다. 내가 겪었던 오류이다. no thread-bound request found are you referring to request att...

blog.naver.com

 

* 에러 전문

20210621 18:40:23.854 [scheduling-1] ERROR o.s.s.s.TaskUtils$LoggingErrorHandler - Unexpected error occurred in scheduled task

org.springframework.dao.InvalidDataAccessApiUsageException: No thread-bound request found: Are you referring to request attributes outside of an actual web request, or processing a request outside of the originally receiving thread? If you are actually operating within a web request and still receive this message, your code is probably running outside of DispatcherServlet: In this case, use RequestContextListener or RequestContextFilter to expose the current request.; nested exception is java.lang.IllegalStateException: No thread-bound request found: Are you referring to request attributes outside of an actual web request, or processing a request outside of the originally receiving thread? If you are actually operating within a web request and still receive this message, your code is probably running outside of DispatcherServlet: In this case, use RequestContextListener or RequestContextFilter to expose the current request.

at org.springframework.orm.jpa.EntityManagerFactoryUtils.convertJpaAccessExceptionIfPossible(EntityManagerFactoryUtils.java:371)

at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:235)

at org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransactionManager.java:566)

at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:743)

at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:711)

at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:654)

at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:407)

at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)

at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)

at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:174)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)

at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)

at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:215)

at com.sun.proxy.$Proxy112.save(Unknown Source)

at packageName.core.schedule.service.ScheduleService.removeAttachFileInServer(ScheduleService.java:42)

at packageName.core.schedule.ScheduleCron.job_60min(ScheduleCron.java:63)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

at java.lang.reflect.Method.invoke(Unknown Source)

at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:84)

at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54)

at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)

at java.util.concurrent.FutureTask.runAndReset(Unknown Source)

at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(Unknown Source)

at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source)

at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)

at java.lang.Thread.run(Unknown Source)

Caused by: java.lang.IllegalStateException: No thread-bound request found: Are you referring to request attributes outside of an actual web request, or processing a request outside of the originally receiving thread? If you are actually operating within a web request and still receive this message, your code is probably running outside of DispatcherServlet: In this case, use RequestContextListener or RequestContextFilter to expose the current request.

at org.springframework.web.context.request.RequestContextHolder.currentRequestAttributes(RequestContextHolder.java:131)

at packageName.core.common.utils.SessionUtil.getSession(SessionUtil.java:22)

at packageName.core.model.entity.base.BaseModel.preUpdate(BaseModel.java:87)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

at java.lang.reflect.Method.invoke(Unknown Source)

at org.hibernate.jpa.event.internal.EntityCallback.performCallback(EntityCallback.java:32)

at org.hibernate.jpa.event.internal.CallbackRegistryImpl.callback(CallbackRegistryImpl.java:95)

at org.hibernate.jpa.event.internal.CallbackRegistryImpl.preUpdate(CallbackRegistryImpl.java:69)

at org.hibernate.event.internal.DefaultFlushEntityEventListener.invokeInterceptor(DefaultFlushEntityEventListener.java:368)

at org.hibernate.event.internal.DefaultFlushEntityEventListener.handleInterception(DefaultFlushEntityEventListener.java:350)

at org.hibernate.event.internal.DefaultFlushEntityEventListener.scheduleUpdate(DefaultFlushEntityEventListener.java:301)

at org.hibernate.event.internal.DefaultFlushEntityEventListener.onFlushEntity(DefaultFlushEntityEventListener.java:172)

at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:93)

at org.hibernate.event.internal.AbstractFlushingEventListener.flushEntities(AbstractFlushingEventListener.java:230)

at org.hibernate.event.internal.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:93)

at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:39)

at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:93)

at org.hibernate.internal.SessionImpl.doFlush(SessionImpl.java:1362)

at org.hibernate.internal.SessionImpl.managedFlush(SessionImpl.java:453)

at org.hibernate.internal.SessionImpl.flushBeforeTransactionCompletion(SessionImpl.java:3212)

at org.hibernate.internal.SessionImpl.beforeTransactionCompletion(SessionImpl.java:2380)

at org.hibernate.engine.jdbc.internal.JdbcCoordinatorImpl.beforeTransactionCompletion(JdbcCoordinatorImpl.java:447)

at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl.beforeCompletionCallback(JdbcResourceLocalTransactionCoordinatorImpl.java:183)

at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl.access$300(JdbcResourceLocalTransactionCoordinatorImpl.java:40)

at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl$TransactionDriverControlImpl.commit(JdbcResourceLocalTransactionCoordinatorImpl.java:281)

at org.hibernate.engine.transaction.internal.TransactionImpl.commit(TransactionImpl.java:101)

at org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransactionManager.java:562)

... 29 common frames omitted

 

 

 

 

728x90
반응형
728x90
반응형

tomcat version : 8.5.69.0

 

1. tomcat으로 war 배포하기

위치 : tomcat설치폴더\conf\server.xml 파일

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<Server>
 
  <!-- 생략 -->
 
  <Service name="SERVER1">
    <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" address="0.0.0.0" secretRequired="false" />
    <Engine name="Catalina" defaultHost="localhost">
      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase" />
      </Realm>
      <!-- war 파일 위치 지정-->
      <Host name="localhost"  appBase="C:\webapps" unpackWARs="true" autoDeploy="true">
        <!-- 해당되는 war 파일명 -->
        <Context docBase="server1" path="/" reloadable="true"/>
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
      </Host>
    </Engine>
  </Service>
</Server>
cs

2개 이상의 war를 하나의 tomcat에서 배포시 아래 붉은색 텍스트 부분을 바꿔 등록하고,

  <Service name="SERVER1">
    <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
  </Service>

13번에 war파일 위치(위치는 수정가능), 15번 라인을 통해 해당되는 war 파일을 지정한다.

 

2. 가상 디렉토리

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<Server>
  <!-- 생략 -->
  <Service name="SERVER1">
    <!-- 생략 -->
    <Engine name="Catalina" defaultHost="localhost">
      <!-- 생략 -->
      <!-- war 파일 위치 지정-->
      <Host name="localhost"  appBase="C:\webapps" unpackWARs="true" autoDeploy="true">
        <!-- 해당되는 war 파일명 -->
        <Context docBase="server1" path="/" reloadable="true"/>
        <!-- virtual directory (ex. 이미지 url) : 물리위치과 맵핑되는 paht -->
        <Context docBase="c:\uploads\server1" path="/uploads/server1" reloadable="true"/>
        <!-- 생략 -->
      </Host>
    </Engine>
  </Service>
</Server>
cs

1번과 같이 세팅한 상태에서 12번 라인을 추가하면 된다.

이렇게 하면 서버의 c:\uploads\server1\image.jpgwebUrl/uploads/server1/image.jpg 로 접근이 가능해진다.

 

* 출처

 

[Tomcat] 톰캣 하나로 여러 개의 war파일 배포하기

[Tomcat] 톰캣 하나로 여러 개의 war파일 배포하기 자, 일단 tomcat과 war파일 일대일로 배포하는 방법은 안다고 가정하겠다. 모른다면 아래링크를 참고하자. [Java] Eclipse 웹프로젝트 war파일 배포하는

haenny.tistory.com

 

톰캣의 컨텍스트 외부로 경로 매핑하는 방법 - Nothing New Under the Sun

일반적으로 웹 프로젝트를 진행해보면 디자인은 디자인팀에서, 프로그램은 프로그램 개발팀에서 별개로 진행하게 되어 별개의 산출물이 만들어진다. 그래서 개발팀의 프로젝트 소스에 디자인

feeva.github.io

 

 

[CVE-2020-1938] apache tomcat 취약점에 따른 업데이트시 참고 사항 – 지락문화예술공작단

CVE-2020-1938 취약점 CVE : http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-1938 KISA : https://www.krcert.or.kr/data/secNoticeView.do?bulletin_writing_sequence=35292APACHE : http://tomcat.apache.org/security-7.html#Fixed_in_Apache_Tomcat_7.0.100

jirak.net

 

분명한건 이전에 해보긴 했다.

문제는 남이 해 놓은거에 숫가락 얻기로 해봤다는거..

역시 모든 것은 역경과 고난(이라고 쓰고 간단히 삽질)을 거쳐야만 배우는걸까?     '') (먼산)

나란 사람 메뉴얼 보다는 무조건 부디쳐봐가며 한다는게 문제.

그래서 담에는 삽질 시간을 줄여보다는 마음으로 기록해둠.

 

* 관련글

[tomcat] memory leak 에러 : https://deonggi.tistory.com/26
[Tomcat] 실행에러 : https://deonggi.tistory.com/76
[Tomcat] java.lang.IllegalArgumentException: The main resource set specified [FOLDER_NAME] ... : https://deonggi.tistory.com/77

 

 

 

728x90
반응형
728x90
반응형

전문적이라 할 수야 없지만, 개인적인 테스트 용도로 테스트 서버가 필요했다.
집에 둘 서버를 사자니 돈도 들고, 여름에 더울거라 클라우드 서버가 있었으면 했다.
AWS에서 무료로 1년이 제공되는 것은 알고 있었지만 다른데서도 무료로 하는건 이번에 알게됐다.

그래서 이번에 내가 선택한 것은 오라클의 클라우드 서버다.
구글링을 해보면 자세히 비교해 주는 정보들이 있으니 검색해 보시길...

내가 혹했던 조건은 아래와 같다.
1. 무료 기간 제한 없음 (이건 나중에 또 바뀔지 모르므로, 우선 의심의 눈초리 -_-+ )
2. 한국에 리전이 있음 (서울, 춘천)
3. 아웃바운드 트래픽 10TB 평생 (역시 의심의 눈초리 -_-+ )
4. 무료 중 서비스가 상대적으로 가장 좋음
5. Public IP 무료 제공

난 윈도우 서버만 써본지라 윈도우 서버를 선택 했는데 putty ssh는 패스하면되고, 방화벽에서 삽질이 있었다.
원격 터미널, mariadb 방화벽이 잘 열리길래 오라클 페이지에서 방화벽이 열리는 줄 알았는데....
추가로 OS에서 방화벽을 열어줘야 하더라...
될꺼면 다 되지 뭔 되고 뭔 안되고 그럼 나더러 어쩌라는 거야


아래는 잘 정리되어 있는 오라클 클라우드 서버 사용방법

 

오라클 클라우드 프리티어(1) - 무료 VPS 사용

[먼저] 해당 포스팅은 오라클 클라우드 프리티어, APM스택구성, 도메인설정,워드프레스 구축까지 이어지는 연재중 처음글 입니다.하단의 링크를 통해 다음 단계의 포스팅을 보실 수 있습니다.인

hoing.io

 

오라클 클라우드 프리티어(2) - 무료 VPS 사용

이전에는 오라클 클라우드에 가입하였고 이번에는 Compute VM을 생성 하는 것에 대해서 진행하도록 하겠습니다.

hoing.io

 

오라클 클라우드 프리티어(3) - 무료 VPS 사용

 

hoing.io

 

오라클 클라우드 프리티어(4) - 무료 VPS 사용

 

hoing.io

 

* 관련글

[Oracle Cloud] ubuntu 서버 세팅 : https://deonggi.tistory.com/134

 

728x90
반응형
728x90
반응형

컨트롤러와 관계 없이 jpa의 entity @PrePersist, @PreUpdate에서 바로 세션 정보를 꺼내고 싶었다.

그러나 지식이 짧은 관계로 방법을 몰랐는데 찾아서 간단히 기록을 남긴다.

 

1. 로그인 세션 기록

1
2
3
4
5
6
7
8
9
10
11
@PostMapping(value = "/login")
public RestResponse<Member> loginProcess(@RequestBody LoginReqDTO reqDTO, HttpServletRequest request) throws Exception {
    // 로그인 계정의 정보 조회        
    Member memberinfo = serviceClass.checkLogin(reqDTO);
    
    if (memberinfo != null && memberinfo.getMemSeq() != null && memberinfo.getMemSeq() > 0) {
        // 세션에 로그인 계정정보 기록
        request.getSession().setAttribute("memberinfo", memberinfo);
    }    
    return new RestResponse<>(memberinfo);
}
cs

8번 라인의 "memberinfo"으로 세션에 로그인 계정정보 기록!

 

2. 세션 정보를 얻기 위한 유틸

1
2
3
4
5
6
public class SessionUtil {
    public static HttpSession getSession() {
        ServletRequestAttributes attr = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes();
        return attr.getRequest().getSession();
    }
}
cs

3. entity의 @PrePersist, @PreUpdate에서 세션에 기록된 접속자의 정보 습득

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
@PrePersist
public void prePersist() {
    this.crtDt = new Date();
    this.updDt = this.crtDt;
 
    // created/updated by 업데이트
    Member user = (Member) SessionUtil.getSession().getAttribute("memberinfo");
    if (user != null) {
        this.crtBy = user.getMemSeq();
        this.updBy = this.crtBy;
    } else {
        this.crtBy = 0;
        this.updBy = 0;
    }
 
}
 
@PreUpdate
public void preUpdate() {
    this.updDt = new Date();
        
    // updated by 업데이트
    Member user = (Member) SessionUtil.getSession().getAttribute("memberinfo");
    if (user != null) {
        this.updBy = user.getMemSeq();
    } else {
        this.updBy = 0;
    }
       
}
cs

7, 23번 라인에서 1번 코드에서 작성한 "memberinfo"를 이용해서 정보 로그인 계정 정보를 얻기

 

 

해당 방법을 이용하면 원하는 어떤 곳에서도 세션 정보를 얻을 수 있다.

 

 

 

 

728x90
반응형
728x90
반응형

대략 아래와 같은 에러가 났습니다.

java.io.IOException: java.io.FileNotFoundException: C:\Users\WINDOWS_ACCOUNT\AppData\Local\Temp\tomcat.8091.3989423076524435769\work\Tomcat\localhost\ROOT\upload_f1f22731_c8ce_4036_a01a_d6ef88fcee54_00000030.tmp (지정된 파일을 찾을 수 없습니다)

 

기존에 잘 사용하던 코드였는데 갑자기 나더군요.

문제는 C:\Users\WINDOWS_ACCOUNT는 제가 업로드 하려던 폴더가 아닙니다.

multipartfile.transferto(file)를 사용 시 나는 것으로, 절대경로를 사용하지 않으면 문제가 되는 겁니다.

 

* 참고정보

 

Spring MVC Multipart file upload random FileNotFoundException

I built a web application using spring MVC, everything is working fine except the file upload in which I got random FileNotFoundExceptions. I found some solutions online like using a different tmp ...

stackoverflow.com

 

그래서 해당 부분에 절대 경로를 사용하도록 수정하여 문제를 해결 했습니다.

아래는 필수 내용만 남긴 셈플 소스 입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
final String uploadPath = "C:\\upload/";
Iterator<String> itr = request.getFileNames();
long currentTime = System.currentTimeMillis();
 
try {
    
    while (itr.hasNext()) {
        
        // extract file
        String fileName = itr.next();
        MultipartFile serverFile = request.getFile(fileName);
        String requestName = serverFile.getName();
        
        // 파일 유무 확인
        if (serverFile.isEmpty()) {
            // 업로드 파일 없음 프로세스    
        } else {
            // 신규 업로드 파일
            String systemName = String.format("%s.%s"String.valueOf(currentTime++), "jpg");
            String fullFilePath = uploadPath + File.separator + systemName;
            // 업로드된 자바의 파일 객체
            // File toFile = new File(fullFilePath);
            // serverFile.transferTo(toFile);
            Path path = Paths.get(fullFilePath).toAbsolutePath();
            serverFile.transferTo(path.toFile());
        }
    }
 
catch (Exception e) {
    logger.error("temporary file upload failed", e);
cs

위 소스 중 주석처리한 22, 23번 라인은 기존에 사용하던 소스로 23번에서 에러가 납니다.

이를 24, 25번 라인과 같이 수정하면 정상 절대경로를 사용하게 되어 작동합니다.

 

* 에러 전문

java.io.IOException: java.io.FileNotFoundException: C:\Users\WINDOWS_ACCOUNT\AppData\Local\Temp\tomcat.8091.3989423076524435769\work\Tomcat\localhost\ROOT\upload_f1f22731_c8ce_4036_a01a_d6ef88fcee54_00000030.tmp (지정된 파일을 찾을 수 없습니다)

at org.apache.catalina.core.ApplicationPart.write(ApplicationPart.java:122)

at org.springframework.web.multipart.support.StandardMultipartHttpServletRequest$StandardMultipartFile.transferTo(StandardMultipartHttpServletRequest.java:256)

at packageName.core.common.utils.FileUploadUtil.uploadProcess(FileUploadUtil.java:121)

at packageName.admin.research.service.ResearchService.updateQustList(ResearchService.java:404)

at packageName.admin.research.service.ResearchService$$FastClassBySpringCGLIB$$3dac1fd9.invoke()

at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)

at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)

at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)

at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123)

at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388)

at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)

at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)

at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692)

at packageName.admin.research.service.ResearchService$$EnhancerBySpringCGLIB$$b7649e19.updateQustList()

at packageName.admin.research.web.ResearchController.updateQustList(ResearchController.java:178)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

at java.lang.reflect.Method.invoke(Unknown Source)

at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:197)

at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:141)

at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106)

at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894)

at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)

at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)

at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1060)

at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:962)

at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)

at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:880)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)

at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)

at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)

at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)

at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)

at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)

at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)

at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)

at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)

at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)

at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)

at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)

at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:346)

at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374)

at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)

at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:887)

at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1684)

at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)

at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)

at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)

at java.lang.Thread.run(Unknown Source)

Caused by: java.io.FileNotFoundException: C:\Users\WINDOWS_ACCOUNT\AppData\Local\Temp\tomcat.8091.3989423076524435769\work\Tomcat\localhost\ROOT\upload_f1f22731_c8ce_4036_a01a_d6ef88fcee54_00000030.tmp (지정된 파일을 찾을 수 없습니다)

at java.io.FileInputStream.open0(Native Method)

at java.io.FileInputStream.open(Unknown Source)

at java.io.FileInputStream.(Unknown Source)

at org.apache.tomcat.util.http.fileupload.disk.DiskFileItem.write(DiskFileItem.java:404)

at org.apache.catalina.core.ApplicationPart.write(ApplicationPart.java:120)

... 64 more

- userMessage: null

- systemMessage: java.io.FileNotFoundException: C:\Users\WINDOWS_ACCOUNT\AppData\Local\Temp\tomcat.8091.3989423076524435769\work\Tomcat\localhost\ROOT\upload_f1f22731_c8ce_4036_a01a_d6ef88fcee54_00000030.tmp (지정된 파일을 찾을 수 없습니다)

- httpStatus: 500 INTERNAL_SERVER_ERROR

- code: null

 

 

 

728x90
반응형
728x90
반응형

jpa에서 nativeQuery를 사용하고 있습니다.

이 nativeQuery를 통한 update시 나타날 수 있는 에러 메시지 입니다.

 

* 에러가 발생되는 jpa Repository의 update nativeQuery

1
2
3
4
5
6
7
@Query(value="UPDATE ITEM_OF_QUESTION"
            + " SET DEL_YN = 'Y'"
            + ", SHOW_YN = 'N'"
            + ", DEL_DT = SYSDATE()"
            + ", DEL_BY=:delBy"
            + " WHERE RSCH_SEQ=:rschSeq AND DEL_YN = 'N'", nativeQuery=true)
public void delByRschSeq(@Param("rschSeq") Integer rschSeq, @Param("delBy") Integer delBy);
cs

 

* 에러 내용

java.sql.SQLException: Can not issue data manipulation statements with executeQuery().

at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129)

at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)

at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:89)

at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:63)

at com.mysql.cj.jdbc.StatementImpl.checkForDml(StatementImpl.java:365)

at com.mysql.cj.jdbc.ClientPreparedStatement.executeQuery(ClientPreparedStatement.java:962)

at net.sf.log4jdbc.sql.jdbcapi.PreparedStatementSpy.executeQuery(PreparedStatementSpy.java:780)

at com.zaxxer.hikari.pool.ProxyPreparedStatement.executeQuery(ProxyPreparedStatement.java:52)

at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeQuery(HikariProxyPreparedStatement.java)

at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:57)

at org.hibernate.loader.Loader.getResultSet(Loader.java:2303)

at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:2056)

at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:2018)

at org.hibernate.loader.Loader.doQuery(Loader.java:948)

at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:349)

at org.hibernate.loader.Loader.doList(Loader.java:2849)

at org.hibernate.loader.Loader.doList(Loader.java:2831)

at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2663)

at org.hibernate.loader.Loader.list(Loader.java:2658)

at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:338)

at org.hibernate.internal.SessionImpl.listCustomQuery(SessionImpl.java:2141)

at org.hibernate.internal.AbstractSharedSessionContract.list(AbstractSharedSessionContract.java:1172)

at org.hibernate.query.internal.NativeQueryImpl.doList(NativeQueryImpl.java:176)

at org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1593)

at org.hibernate.query.internal.AbstractProducedQuery.getSingleResult(AbstractProducedQuery.java:1641)

at org.springframework.data.jpa.repository.query.JpaQueryExecution$SingleEntityExecution.doExecute(JpaQueryExecution.java:196)

at org.springframework.data.jpa.repository.query.JpaQueryExecution.execute(JpaQueryExecution.java:88)

at org.springframework.data.jpa.repository.query.AbstractJpaQuery.doExecute(AbstractJpaQuery.java:155)

at org.springframework.data.jpa.repository.query.AbstractJpaQuery.execute(AbstractJpaQuery.java:143)

at org.springframework.data.repository.core.support.RepositoryMethodInvoker.doInvoke(RepositoryMethodInvoker.java:137)

at org.springframework.data.repository.core.support.RepositoryMethodInvoker.invoke(RepositoryMethodInvoker.java:121)

at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.doInvoke(QueryExecutorMethodInterceptor.java:152)

at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.invoke(QueryExecutorMethodInterceptor.java:131)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)

at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:80)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)

at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123)

at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388)

at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)

at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)

at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:145)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)

at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)

at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:215)

at com.sun.proxy.$Proxy106.delByRschSeq(Unknown Source)

at packagename.admin.research.service.ResearchService.updateItem(ResearchService.java:199)

at packagename.admin.research.service.ResearchService$$FastClassBySpringCGLIB$$3dac1fd9.invoke()

at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)

at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)

at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)

at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123)

at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388)

at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)

at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)

at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692)

at packagename.admin.research.service.ResearchService$$EnhancerBySpringCGLIB$$9e7f11fa.updateItem()

at packagename.admin.research.web.ResearchController.updateItem(ResearchController.java:151)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

at java.lang.reflect.Method.invoke(Unknown Source)

at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:197)

at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:141)

at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106)

at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894)

at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)

at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)

at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1060)

at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:962)

at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)

at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:880)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)

at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)

at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)

at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)

at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)

at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)

at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)

at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)

at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)

at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)

at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)

at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)

at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:346)

at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374)

at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)

at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:887)

at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1684)

at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)

at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)

at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)

at java.lang.Thread.run(Unknown Source)

 

Repository의 update nativeQuery 위에 @Modifying를 아래와 같이 사용해 주면 됩니다.

1
2
3
4
5
6
7
8
@Modifying
@Query(value="UPDATE ITEM_OF_QUESTION"
            + " SET DEL_YN = 'Y'"
            + ", SHOW_YN = 'N'"
            + ", DEL_DT = SYSDATE()"
            + ", DEL_BY=:delBy"
            + " WHERE RSCH_SEQ=:rschSeq AND DEL_YN = 'N'", nativeQuery=true)
public void delByRschSeq(@Param("rschSeq") Integer rschSeq, @Param("delBy") Integer delBy);
cs

 

 

 

* 관련글

[spring, jpa] Cannot add or update a child row: a foreign key constraint fails : https://deonggi.tistory.com/115
[spring, jpa] Use @Param for query method parameters, or when on Java 8+ use the javac flag -parameters. : https://deonggi.tistory.com/121

 

 

 

728x90
반응형
728x90
반응형

jpa에서 nativeQuery를 사용하고 있습니다.

이때 파라미터를 사용하는 경우 나타날 수 있는 에러 메시지 입니다.

 

* 에러가 발생되는 jpa Repository의 nativeQuery

1
2
3
@Query(value="SELECT MAX(ITEM_SEQ) FROM ITEM_OF_QUESTION a "
            + "WHERE a.RSCH_SEQ=:rschSeq AND a.QUST_SEQ=:qustSeq", nativeQuery=true)
public Integer getMaxItemSeqByRschSeq(Integer rschSeq, Integer qustSeq);
cs

 

 

* 에러 내용

org.springframework.dao.InvalidDataAccessApiUsageException: For queries with named parameters you need to use provide names for method parameters. Use @Param for query method parameters, or when on Java 8+ use the javac flag -parameters.; nested exception is java.lang.IllegalStateException: For queries with named parameters you need to use provide names for method parameters. Use @Param for query method parameters, or when on Java 8+ use the javac flag -parameters.

at org.springframework.orm.jpa.EntityManagerFactoryUtils.convertJpaAccessExceptionIfPossible(EntityManagerFactoryUtils.java:371)

at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:235)

at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:551)

at org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:61)

at org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:242)

at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:152)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)

at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:145)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)

at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)

at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:215)

at com.sun.proxy.$Proxy106.delByRschSeq(Unknown Source)

at packagename.admin.research.service.ResearchService.updateItem(ResearchService.java:199)

at packagename.admin.research.service.ResearchService$$FastClassBySpringCGLIB$$3dac1fd9.invoke()

at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)

at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)

at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)

at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123)

at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388)

at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)

at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)

at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692)

at packagename.admin.research.service.ResearchService$$EnhancerBySpringCGLIB$$92a89d27.updateItem()

at packagename.admin.research.web.ResearchController.updateItem(ResearchController.java:151)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

at java.lang.reflect.Method.invoke(Unknown Source)

at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:197)

at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:141)

at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106)

at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894)

at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)

at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)

at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1060)

at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:962)

at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)

at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:880)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)

at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)

at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)

at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)

at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)

at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)

at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)

at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)

at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)

at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)

at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)

at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)

at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:346)

at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374)

at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)

at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:887)

at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1684)

at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)

at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)

at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)

at java.lang.Thread.run(Unknown Source)

Caused by: java.lang.IllegalStateException: For queries with named parameters you need to use provide names for method parameters. Use @Param for query method parameters, or when on Java 8+ use the javac flag -parameters.

at org.springframework.data.jpa.repository.query.QueryParameterSetterFactory$BasicQueryParameterSetterFactory.lambda$getName$2(QueryParameterSetterFactory.java:258)

at java.util.Optional.orElseThrow(Unknown Source)

at org.springframework.data.jpa.repository.query.QueryParameterSetterFactory$BasicQueryParameterSetterFactory.getName(QueryParameterSetterFactory.java:258)

at org.springframework.data.jpa.repository.query.QueryParameterSetterFactory$BasicQueryParameterSetterFactory.findParameterForBinding(QueryParameterSetterFactory.java:245)

at org.springframework.data.jpa.repository.query.QueryParameterSetterFactory$BasicQueryParameterSetterFactory.create(QueryParameterSetterFactory.java:216)

at org.springframework.data.jpa.repository.query.ParameterBinderFactory.createQueryParameterSetter(ParameterBinderFactory.java:140)

at org.springframework.data.jpa.repository.query.ParameterBinderFactory.createSetters(ParameterBinderFactory.java:129)

at org.springframework.data.jpa.repository.query.ParameterBinderFactory.createQueryAwareBinder(ParameterBinderFactory.java:100)

at org.springframework.data.jpa.repository.query.AbstractStringBasedJpaQuery.createBinder(AbstractStringBasedJpaQuery.java:102)

at org.springframework.data.util.Lazy.getNullable(Lazy.java:230)

at org.springframework.data.util.Lazy.get(Lazy.java:114)

at org.springframework.data.jpa.repository.query.AbstractStringBasedJpaQuery.doCreateQuery(AbstractStringBasedJpaQuery.java:92)

at org.springframework.data.jpa.repository.query.AbstractJpaQuery.createQuery(AbstractJpaQuery.java:227)

at org.springframework.data.jpa.repository.query.JpaQueryExecution$ModifyingExecution.doExecute(JpaQueryExecution.java:239)

at org.springframework.data.jpa.repository.query.JpaQueryExecution.execute(JpaQueryExecution.java:88)

at org.springframework.data.jpa.repository.query.AbstractJpaQuery.doExecute(AbstractJpaQuery.java:155)

at org.springframework.data.jpa.repository.query.AbstractJpaQuery.execute(AbstractJpaQuery.java:143)

at org.springframework.data.repository.core.support.RepositoryMethodInvoker.doInvoke(RepositoryMethodInvoker.java:137)

at org.springframework.data.repository.core.support.RepositoryMethodInvoker.invoke(RepositoryMethodInvoker.java:121)

at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.doInvoke(QueryExecutorMethodInterceptor.java:152)

at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.invoke(QueryExecutorMethodInterceptor.java:131)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)

at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:80)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)

at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123)

at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388)

at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)

at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137)

... 69 more

- userMessage: null

- systemMessage: For queries with named parameters you need to use provide names for method parameters. Use @Param for query method parameters, or when on Java 8+ use the javac flag -parameters.; nested exception is java.lang.IllegalStateException: For queries with named parameters you need to use provide names for method parameters. Use @Param for query method parameters, or when on Java 8+ use the javac flag -parameters.

- httpStatus: 500 INTERNAL_SERVER_ERROR

- code: null

 

 

@Param를 추가하면 해결할 수 있습니다.

1
2
3
@Query(value="SELECT MAX(ITEM_SEQ) FROM ITEM_OF_QUESTION a "
            + "WHERE a.RSCH_SEQ=:rschSeq AND a.QUST_SEQ=:qustSeq", nativeQuery=true)
public Integer getMaxItemSeqByRschSeq(@Param("rschSeq") Integer rschSeq, @Param("qustSeq") Integer qustSeq);
cs

파라미터 부분에 @Param("rschSeq") 와 같이 입력해 주면 됩니다.

 

 

* 관련글
[spring, jpa] Cannot add or update a child row: a foreign key constraint fails : https://deonggi.tistory.com/115
[spring, jpa] Can not issue data manipulation statements with executeQuery() : https://deonggi.tistory.com/122

 

 

 

728x90
반응형
728x90
반응형

예를들어 라디오 버튼에서 변경시 이벤트를 적용하고 있다.

 

이때, 아래와 같이 동적으로 추가된 태그에서는 이미 적용했던 동일한 이벤트가 적용되지 않는다.

1
2
3
4
5
6
7
8
9
10
11
<!-- 기본html 작성된 tag -->
<input class="form-check-input" type="radio" id="qustList[0].pntY" name="qustList[0].pntYn" value="Y" checked>
<label class="form-check-label">Point Ues</label> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<input class="form-check-input" type="radio" id="qustList[0].pntN" name="qustList[0].pntYn" value="N">
<label class="form-check-label">Point Not</label>
 
<!-- 동적으로 추가된 tag -->
<input class="form-check-input" type="radio" id="qustList[1].pntY" name="qustList[1].pntYn" value="Y" checked>
<label class="form-check-label">Point Ues</label> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<input class="form-check-input" type="radio" id="qustList[1].pntN" name="qustList[1].pntYn" value="N">
<label class="form-check-label">Point Not</label>
cs

 

이와 같은 경우 아래와 같이 이벤트를 off 한 후 다시 on 하면 문제없이 원하는 이벤트를 적용할 수 있다.

1
2
3
4
$("input[name^='qustList['][name$='pntYn']").off("change");
$("input[name^='qustList['][name$='pntYn']").on("change"function(){
    // 적용할 코드
});
cs

 

 

* 관련글

[javascript] 동적 태그 추가 : https://deonggi.tistory.com/34

 

 

728x90
반응형

+ Recent posts