[Trouble Shooting] 통합테스트(intTest) Error : GenerationTarget encountered exception accepting command : Error executing DDL ...

yusub kwak·2025년 1월 14일

Trouble Shooting

목록 보기
2/5
post-thumbnail

개요


이전 오류 해결에 이어 오늘은 해당 오류를 해결해보도록 하자. 결과부터 말하면 이래도 intTest가 돌아가진 않았다😥

발생 상황


org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL "
    alter table subscribe 
       add constraint FKgnxvys06tns02nbr5bxj1xxh8 
       foreign key (user_id) 
       references users (id)" via JDBC [Table "USERS" not found;]

에러 메시지에서 말해주듯 users 테이블이 존재하지 않는다고 나와있는데 show-sql를 통해 확인해본 결과 정말로 users를 제외한 나머지 테이블만 생성이 되는 것을 확인할 수 있었다.

이제 원인을 알았으니 해결방법을 알아보도록 하자.

해결 방법


내가 찾은 해결방법은 2가지다.

1. ddl auto 상태 변경

ddl auto가 update상태여서 users 테이블이 생성안되는 것이였다. create와 create drop을 하니 정상적으로 Users 테이블이 생성되는 것을 확인했다. (테스트는 무조건 create-drop으로)

개인적으로 테스트DB에 아무것도 저장이 안된 상태임에도 Update로 Users 테이블만 제외하고 create한다는게 아직도 이해가 잘안된다...

2. 예약어

ddl auto를 사용할 때 주의사항으로 sql 예약어를 사용하는것은 지양해야한다.

H2공식문서에서도 예약어로 user가 존재하기 때문에

이렇듯 예약어를 피하기 위해 table명을 users로 변경했으나 그래도 생성이 안되고 있었다.

@Table(name = "\"users\"")

그럴 경우 큰따옴표를 붙여주도록 하자. 그러면 예약어 상관없이 테이블명으로 인식해서 제대로 테이블이 생성되는 것을 확인할 수 있었다.

참고자료


Spring Data JPA를 사용할 때 필드 이름이 데이터베이스의 예약어와 같아서 문법 오류가 발생한다면?

profile
맡은 일은 끝까지 책임지고 완수하자

0개의 댓글