미니옵빠의 code stubs

Hibernate에서 ids for this class must be manually assigned before calling save() 오류가 발생할 경우 본문

Language/Java

Hibernate에서 ids for this class must be manually assigned before calling save() 오류가 발생할 경우

미니옵빠 2010. 3. 7. 15:02

ORM으로 Hibernate를 사용할 때, ids for this class must be manually assigned before calling save() 라는 오류를 만날 때가 있습니다. 오류 메시지 그대로 Object에 키가 되는 값을 assign하라는 뜻인데요, OR mapping한 XML 파일 내에서 generator를 이미 설정해 둔 상태입니다.

                

그런데 왜 이런 오류 메시지가 나타날까요?
문제는 generator을 잘못 설정했기 때문입니다.

generator가 assigned로 되어있는데, increment로 변경하면 정상동작하게 됩니다.

                

참고로,
assigned:  hibernate가 제공하는 id generator을 사용하지 않겠다. 즉, 직접 키가 되는 값을 만들어 매핑하겠다
increment: hibernate가 제공하는 id generator을 사용하겠다. 즉 hibernate에서 생성해주는 자동증가의 id 값을 사용하겠다
입니다.

increment의 경우, DB schema 상에 키가 되는 필드에 auto increment 설정을 빼는 것이 좋습니다. hibernate에서 만들어주는 id가 있는데 DB에서 만들어주는 id가 또 존재하기 때문에, 중복되어 오류가 발생할 수도 있거든요.

generator에 대한 설명은 아래를 참고하세요.
http://www.roseindia.net/hibernate/hibernateidgeneratorelement.shtml