관리 메뉴

KorSA

MyBatis SelectKey returned no data 에러 본문

Development Experience/DB

MyBatis SelectKey returned no data 에러

Praiv. 2022. 2. 25. 15:40
320x100

MyBatis를 이용한 프로젝트에서 객체 하나를 Maria DB에 insert하고 그 키값을 얻어오고 싶었다.

 

키값은 AUTO_INCREMENT 속성 대신 DB에서 직접 생성한 UUID 값을 사용하기로 하였는데,

 <insert> 태그에 추가로 <selectKey> 태그를 넣어주어야 했다.

 

그래서 아래와 같이 작성했는데

<insert id="insert" parameterType="myCustomType">
	<selectKey keyProperty="myObjectId" resutType="myCustomType" order="BEFORE">
    	SELECT
        	UUID() as MY_OBJECT_ID
        FROM
        	MY_CUSTOM_TABLE
    </selectKey>
    INSERT INTO MY_CUSTOM_TABLE (
    	MY_OBJECT_ID
    ) VALUES (
    	#{myObjectId}
    );
</insert>

 

But...

어쩐 일인지 계속 "SelectKey returned no data" 에러만 계속 발생하였다.

 

테스트해보니 테이블에 데이터가 있을 경우 이 에러는 발생하지 않고

테이블이 비어있는 경우에만 이 에러가 발생하였다.

 

구글링해보니 남들은 테이블에 값이 있든 없든 잘만 insert되는 거 같은데...

혹시 싶어서 SELECT 문에서 FROM 절을 제거해보았다.

<insert id="insert" parameterType="myCustomType">
	<selectKey keyProperty="myObjectId" resutType="myCustomType" order="BEFORE">
    	SELECT
        	UUID() as MY_OBJECT_ID
    </selectKey>
    INSERT INTO MY_CUSTOM_TABLE (
    	MY_OBJECT_ID
    ) VALUES (
    	#{myObjectId}
    );
</insert>

 

엥? 갑자기 너무 잘된다.

DB에 insert할 때 새로 생성된 UUID 값이 잘 저장되고,

insert 구문이 호출된 이후 java 객체에도 UUID값이 잘 담겨져있었다.

 

결론적으로 "SelectKey returned no data" 에러는 FROM 절을 사용한 게 문제였다.

728x90
728x90
Comments