본문 바로가기

프로그래밍언어/Java

JPA구현을 Unitils + DBUnit으로 테스트를 수행할 때 제약사항 오류의 원인과 해결방안

JPA구현을 Unitils + DBUnit으로 테스트를 수행할 때 다음과 같은 에러가 발생한 경우
DBUnit이 초기화하는 테이블의 순서에 주의해야한다.
즉, A OneToMany B, C OneToMany B 와 같이 정의한 경우 A, C, B 순서로 정의해야만한다.
이때 DBUnit은 A, C, B의 순서로 데이터를 로드하고 B, C, A의 순서로 클리어한다.
그런나 만약 B를 C앞에 정의하게 되면 다시말해 A, B, C의 순서로 정의하면 삭제할 때 아래와 같은 제약사항 오류를 보게된다.


Caused by: org.unitils.core.UnitilsException: Error while executing DataSetLoadStrategy
at org.unitils.dbunit.datasetloadstrategy.impl.BaseDataSetLoadStrategy.execute(BaseDataSetLoadStrategy.java:48)
at org.unitils.dbunit.DbUnitModule.insertDataSet(DbUnitModule.java:230)
at org.unitils.dbunit.DbUnitModule.insertDataSet(DbUnitModule.java:153)
... 22 more
Caused by: java.sql.SQLException: Integrity constraint violation FK1258F61560459CB5 table: CU_SHOP_EXTRA_CONTACT
at org.hsqldb.jdbc.Util.sqlException(Unknown Source)
at org.hsqldb.jdbc.jdbcStatement.fetchResult(Unknown Source)
at org.hsqldb.jdbc.jdbcStatement.execute(Unknown Source)
at org.dbunit.database.statement.SimpleStatement.executeBatch(SimpleStatement.java:67)
at org.dbunit.operation.DeleteAllOperation.execute(DeleteAllOperation.java:125)
at org.dbunit.operation.CompositeOperation.execute(CompositeOperation.java:78)
at org.unitils.dbunit.datasetloadstrategy.impl.CleanInsertLoadStrategy.doExecute(CleanInsertLoadStrategy.java:45)
at org.unitils.dbunit.datasetloadstrategy.impl.BaseDataSetLoadStrategy.execute(BaseDataSetLoadStrategy.java:44)
... 24 more