코딩마을방범대
JPA가 대문자 테이블명을 인식하지 못할 때 본문
728x90
예를 들어 'USER'라는 대문자로 된 테이블을 생성한 후,
Spring에서 @Entity(name="USER")로 명시해주었으나
아래와 같이 table을 찾지 못하는 문제가 발생했다.
Table 'DB명.테이블명' doesn't exist
Spring에서 Hibernate 기본 설정에 의해 대소문자를 구별하지 않아 발생하는 문제이며,
yml 설정을 통해 테이블 수정 없이 인식 가능하다.
1. MySQL 테이블 생성 설정을 확인
show variables like 'lower%';
위 명령어 입력 시 하기와 같은 데이터를 확인할 수 있다.
'lower_case_table_names'이 0일 경우 대소문자를 구분, 1일 경우 구분하지 않는다.

0(대소문자 구분)으로 만들어졌을 경우, 대문자 테이블은 JPA에서 읽어올 수 없다.
2. yml 설정 변경
spring:
jpa:
hibernate:
naming:
physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
implicit-strategy: org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl
Physical Naming Strategy (PhysicalNamingStrategy)
물리적 네이밍 전략은 실제 데이터베이스에 저장될 테이블 및 컬럼의 이름을 결정하는 방식입니다. 이 전략은 엔티티 및 속성 이름을 데이터베이스에 맞게 변환하는 역할을 합니다.
Implicit Naming Strategy (ImplicitNamingStrategy)
묵시적 네이밍 전략은 엔티티의 이름을 기반으로 데이터베이스 테이블 이름을 생성하는 방식입니다. 이 전략은 엔티티가 명시적으로 매핑되지 않은 경우, Hibernate가 자동으로 테이블 이름을 유추하는 데 사용됩니다.
3. 변수명, 테이블명 확인
위 설정을 해줄 경우 선언한 이름 그대로 인식하기 때문에
Hibernate의 카멜표기법 -> 스네이크표기법 으로 변환해주는 기능도 off 되었다.
❗❗ 써있는 그대로 인식하게 되었으니 정확하게 표기해주는 작업이 필요 ❗❗
yml 설정을 하지 않았을 경우 Hibernate:

yml 설정을 했을 경우 Hibernate:

728x90
'💡 백엔드 > Java' 카테고리의 다른 글
Log - (2) Logback (0) | 2023.05.28 |
---|---|
SpringBoot Custom Annotation 생성하기 - (1) 파라미터에 부여 (0) | 2023.05.28 |
SpringBoot의 QueryDSL (0) | 2023.05.28 |
SpringBoot의 @Converter (0) | 2023.05.28 |
JWT - (2) Java에서 JWT 사용하기 (0) | 2023.05.28 |