상세 컨텐츠

본문 제목

SpringBoot 서비스단 반복문에서 쿼리가 재사용된다??

카테고리 없음

by 겸둥선짱 2023. 5. 4. 16:41

본문

SpringBoot Java 서비스단의 반복문에서 쿼리 3개를 INSERT하고있다.

insert A에서 사용하는 값중에 키 값을 두개를 가져와야하는데,

하나는 INSERT 쿼리 안에서 selectKey로 NEXTVAL 형태로 가져오고있어서 문제가 되지 않았는데

다른 하나는 공통 서비스단의 함수를 조회하여 내부 로직으로 채번하는 함수를 타야했다. (함수 내에서 커밋을 하고 있고 말했다싶이 NEXTVAL이 아님)

그런데 자꾸 그 함수를 for문에서 돌려도 처음 한번만 쿼리를 타고 그 결과를 재사용을 하는 것이었다.

회사가 나올 수도 있는 것은 모자이크처리

 

호출하는 함수 내부에서 커밋을 하고 있어서 괜찮겠지 생각하며 왜 안되는거지 엄청난 삽질을 했다.

다른 서비스를 호출해서 거기서 문제가 있는것인가 싶어서 호출하는 서비스 안으로도 옮겨보고 했는데 해결은 전혀 안됐다.

그러면서 sqlSession을 따로 가져가보기도 했는데 flushStatement와 cache를 지우니 되는 것이었다.!

sqlSession.flushStatements();
sqlSession.clearCache();

부장님께 트랜잭션에 문제가 있고 어떻게 해결해야할지 도움을 받고자 한다며 상황을 설명드렸다.

flush와 cache를 지우니 되었다는 말에 xml쪽에 두 단어를 추가하셨다.

<select id="getStockNo" parameterType="searchGetStockNo" resultType="string" flushCache="true" useCache="false">

flushCache="true" useCache="false"

이것을 추가하니 for문 안에서도 쿼리 재사용을 하지 않았다.

 

미래에 또 써먹을 수도 있기때문에 기록해둔다.