주로 테스트를 할때 H2 DB를 사용해 가볍게 관리한다. 또한 이 경우 ddl-auto를 사용해 create, create-drop, update 등을 사용하곤 하는데 이번의 경우 DB가 create 또는 create-drop으로 ddl-auto로 작동될때 연관관계로 매핑된 테이블이 FK의 값으로 인해 정상적으로 DB의 테이블이 삭제되지 않았을때의 해결 방법이다.
Exception의 경우
Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Cannot drop "MEMBER" because "FKH0DB7KQR88ED8HQTCQW3JKCIA" depends on it; SQL statement:
drop table Member if exists [90107-200]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:576)
이와 같이 비슷한 로그가 찍힐 것 이다.
ex) pom.xml (maven)
<!-- JPA 하이버네이트 -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>5.4.13.Final</version>
</dependency>
<!-- H2 데이터베이스 -->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>2.1.214</version>
</dependency>
ex) gradle
implementation 'org.hibernate:hibernate-core:5.4.13.Final'
testImplementation 'com.h2database:h2:2.1.214'
// runtimeOnly 'com.h2database:h2:2.1.214'
상황에 맞게 잘 설정해주면된다. 현재 포스팅 기준으로는 H2는 2.1.214 버전이 제일 최신이고 hibernate의 경우 6.2.3 final 버전이 가장 최신이다.
사실 별거 아니면서도 별게 될 수 있는 문제이기에 해당 익셉션이 터진다면 최대한 빨리 해결해주는 것이 정신건강에 좋을 것 같다. 괜히 이것저것 삭제 안되다가 데이터 꼬여서 테스트가 이상해진다고 생각하면(...) 아무튼 위와같이 해결해주면 된다 🤔