이 Entity는
이와 같은 lowerCarmelCase를 lower_snake_case로 변환하여 테이블을 생성합니다.
MySQL같은 경우는 쿼리를 날릴 때 두가지 설정인 경우가 있습니다. 문자의 대소문자를 확실히 구분하는 설정과 그렇지 않은 설정
예를들어,SELECT team_id FROM team;
과SELECT TEAM_ID FROM TEAM;
을 구분하여 조회하는 설정(두 쿼리의 결과가 다른)과 그렇지 않은(두 쿼리의 결과가 같은)설정입니다. 저희 DB설정은 전자인 상황이었습니다.
새로운 전략클래스를
SpringPhysicalNamingStrategy
를 상속받아 Custom하여 설정값으로 물려주는 방법
SpringPhysicalNamingStrategy
클래스를 잠시 들어가봅니다. 들어가서 소스를 보게 되면 위에서 말한 기본전략이 구현되어있는 부분을 보실 수 있습니다.
public class UpperCaseNamingStrategy extends SpringPhysicalNamingStrategy {
@Override
protected Identifier getIdentifier(String name, boolean quoted, JdbcEnvironment jdbcEnvironment) {
return new Identifier(name.toUpperCase(), quoted); // 파라미터로 넘어온 name값을 대문자화 시킵니다.
}
}
UpperCaseNamingStrategy
클래스를 만듭니다.참고로 파라미터로 넘어오는 name의 값은 아래 그림과 같습니다.
OrderItem 이란 클래스를 Order_Item으로 만들어 버리는군요
spring:
jpa:
hibernate:
naming:
physical-strategy: web.common.strategy.UpperCaseNamingStrategy # 커스텀클래스 패키지
이렇게 설정 후에 다시 로그를 보시면
저희가 원한대로 UPPER_SNAKE_CASE가 적용된 모습을 볼 수 있습니다.
참고사이트
1. https://www.baeldung.com/spring-data-jpa-custom-naming
2. https://docs.spring.io/spring-boot/docs/1.5.x/reference/html/howto-data-access.html#howto-configure-hibernate-naming-strategy