반응형

SpringBoot를 이용해 개발을 하며 test 케이스를 작성하고 실행을 하였다

 

그리고 각 테스트 케이스 마다 영향을 주지 않기 위해

 

@After 어노테이션으로 각 repository.deleteAll() 메소드를 실행하도록 하였다.

 

그런데 ?? 

 

org.hibernate.exception.ConstraintViolationException: could not execute statement

이런 에러가 발생하였다.

 

https://stackoverflow.com/questions/49595852/deleteall-in-repository-randomly-causes-constraintviolationexception

 

deleteAll() in Repository randomly causes ConstraintViolationException

I have tests that do CRUD operations on an API. Before each test the test data in the API gets recreated. Meaning deleting all data in the database and inserting the test data again. public void

stackoverflow.com

여기에 어느정도 잘 나와있는 것 같다.

 

Hibernate를 사용하여 테스트 하는 환경에서 나타나는 일반적인 에러란다~

 

원인은 코드의 쿼리가 순차적으로 즉시 수행되는 것이 아니기 때문이다.

 

그래서 deleteAll() 대신 deleteAllInBatch()를 사용해서 해결했다.

 

deleteAll()은 delete를 여러번 실행하며 모두 삭제하는 것이고, deleteAllInBatch()는 한번의 실행으로 전부를 삭제하는 것이다.

반응형
반응형

error executing ddl via jdbc statement 

spring boot + jpa  환경에서

 

jpa 엔티티를 생성하고 테스트 하는 도중 에러가 발생하였다.

엔터티 설정중 @Column 어노테이션을 이용해서 컬럼 타입이나 기타 정보를 입력하지 않은 상태에서 실행하면

alert table 문장이 문법에 맞지 않은게 생성이 되서 오류가 났다.

 

spring:
  profiles: local
  jpa:
    show-sql: true
    hibernate:
      ddl-auto: update

이렇게  ddl-auto: update 옵션을 추가하여 해결하였다.

엔터티에서 변동이 일어나면 자동으로 ddl 명령을 실행해 테이블을 변경하겠금 설정했을시에

컬럼이 추가 되거나 컬럼속성이 변경되면 실행된다

 

반응형

+ Recent posts