JPA가 대문자 테이블명을 인식하지 못할 때

단비·2023년 5월 18일
0

학습

목록 보기
53/66

예를 들어 USER라는 대문자로 된 테이블을 만든 후,

Spring에서 @Entity(name="USER")로 명시해주었으나
아래와 같이 table을 찾지 못하는 문제가 발생했다.

Table 'DB명.테이블명' doesn't exist

Spring에서 Hibernate 기본 설정에 의해 대소문자를 구별하지 않아 발생하는 문제며,
yml 설정을 통해 테이블 수정 없이 인식 가능하다.



첫번째로, MySQL 테이블 생성 설정을 확인

아래와 같이 명령어 입력 시

show variables like 'lower%';

하기와 같은 데이터를 확인할 수 있다.
lower_case_table_names이 0일 경우 대소문자를 구분, 1일 경우 구분하지 않는다.

0(대소문자 구분)으로 만들어졌을 경우
대문자 테이블의 경우 JPA에서 읽어올 수 없다.



두번째로, yml 설정 변경

spring:
  jpa:
    hibernate:
      naming:
        physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
        implicit-strategy: org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl



세번째로, 변수명, 테이블명 확인

위 설정을 해줄 경우 선언한 이름 그대로 인식하기 때문에
Hibernate의 카멜표기법 -> 스네이크표기법 으로 변환해주는 기능도 off 되었다.

❗❗ 써있는 그대로 인식하게 되었으니 정확하게 표기해주는 작업이 필요 ❗❗



yml 설정을 안해줬을 경우 Hibernate:

yml 설정을 해줬을 경우 Hibernate:

profile
tistory로 이전! https://sweet-rain-kim.tistory.com/

0개의 댓글