문제상황
역시나 마찬가지로 이전과 같이
Member엔터티와 MemberRepository구현체를 작성 후, 아래와 같이 Member를 Repository에 저장하는 테스트를 실행한 상황@Test public void 회원가입() throws Exception{ Member member = new Member(); // userId, password, name, username, address, sex, email member.setUserId("yasuo123"); member.setPassword("password99"); member.setName("kimyounghan"); member.setUsername("best yasuo"); Address address1 = new Address("South Korea", "Busan"); member.setAddress(address1); member.setSex(Sex.Male); member.setEmail("yasuo123@gmail.com"); em.persist(member); assertThat(member.getName()).isEqualTo(em.find(Member.class, member.getId()).getName()); }그리고 다음 에러가 발생했다.
org.hibernate.exception.SQLGrammarException: could not prepare statement
뇌피셜
처음에는 위 오류의 SQLGrammerException을 보고 Repository에 작성한 JPQL문이 잘못 된 줄 알았지만 JPA책이나 다른 글들을 참고해봐도 아무 이상이 없었다.
그래서 어쨌든간에 계속해서 Repository클래스의 코드들을 검사해봤지만 문제를 찾을 수 없었다.
해결
application.yml파일의 설정이 잘못되어 제대로된 SQL statement가 생성되지 않았던 것이었다. 이 오류를 구글링 해보면 대체로jpa: hibernate: ddl-auto: create에서 ddl-auto의 인덴테이션을 잘못 작성한 케이스가 많았다.
하지만 나는 확인해보니 제대로 작성되어있어서 그냥 예전에 공부하면서 작성했던 yml파일을 복붙했더니 해결되었다.spring: datasource: url: jdbc:h2:tcp://localhost/~/welcheck_backend username: sa password: driver-class-name: org.h2.Driver jpa: hibernate: ddl-auto: create properties: hibernate: format_sql: true logging.level: org.hibernate.SQL: debug역시 아직 내가 직접 작성하다 보면 생기는 오류가 많은 것 같다.