SQL Error: 23505, SQLState: 23505 - JPA 사용 도중

반응형

JPA를 사용도중 이상한 버그가 발생되었습니다.

JPA를 사용도중 이상한 버그가 발생되었습니다.

코드를 연습하는 과정에서 JPA의 기능 중 하나인 DROP TABLE이 동작되지 않아서 기존의 TABLE에 내용이 그대로 남게 되었으며, 동시에 같은 PK를 INSERT 하는 과정에 의해 개체무결성 오류가 발생되는 문제였습니다.

 

이는 강의의 코드 중, 과거의 H2 버전을 참고하다 발생된 문제이며 H2의 1.4.199는 상위 hibernate를 가져올 경우 상속된 CLASS의 Entity는 DROP TABLE이 제대로 동작되지 않는 버그였습니다.

 

이를 간단히 해결하기 위해서는 JPA를 사용하기 위한 라이브러리를 최신버전으로 Update를 해야 할 필요가 있었습니다.

 

 

상위 버전 맞추기

SELECT H2VERSION() FROM DUAL;

H2의 현재 Version을 검색한다.

H2의 SQL를 입력하여, H2의 버전을 최신버전을 찾습니다.

 

 

https://mvnrepository.com/artifact/com.h2database/h2

메이븐 리포지토리에서 H2의 버전을 찾는다.

 

방법

H2에서 검색된 Version을 찾는다.
알맞는 버전을 찾았다면, 사용하고 있는 빌드관리에 맞춰서 정보를 업데이트 한다.

 

위의 방법대로 라이브러리, H2를 업데이트를 진행했다면, 그다음은 hibernate 또한 업데이트를 진행해주셔야 합니다.

 

 

hibernate 설정

hibernate 또한 메이븐 리포지토리에 존재하며, EntityManager가 들어있는 것을 설치하셔야 합니다.

 

설치할 때는 날짜를 참고하여 설치하면 좋다.

hibernate를 설치할 때는 H2로 인하여, hibernate 또한 Update가 필요한 상황이므로 DB의 라이브러리가 생겨난 날짜와 근접한 버전을 생성하는 것이 매우 바람직합니다.

 

너무 상위, 하위가 될수록 호환성 문제가 생길 수 있기 때문입니다.

 

 

<!-- JPA 하이버네이트 -->
<dependency>
  <groupId>org.hibernate</groupId>
  <artifactId>hibernate-entitymanager</artifactId>
  <version>5.6.15.Final</version>
</dependency>
<!-- H2 데이터베이스 -->
<dependency>
  <groupId>com.h2database</groupId>
  <artifactId>h2</artifactId>
  <version>2.2.220</version>
</dependency>

위 과정을 거쳐서, 해당 버전이 탄생하게 되었습니다.

 

 

 

pom.xml 설치 후, 해당 프로젝트에 라이브러리가 제대로 들어있는지 확인까지 완료해주시면 됩니다.

반응형

댓글

Designed by JB FACTORY