본문 바로가기
JPA

JPA DB 컬럼 네이밍 문제

by 성건희 2023. 9. 5.
반응형

Physical Naming Strategy (물리적 명칭 전략)

회사 프로젝트의 JPA 네이밍 전략이 CamelCaseToUnderscoresNamingStrategy 로 세팅되어 있었는데,

jpa.properties.hibernate.physical_naming_strategy=org.hibernate.boot.model.naming.CamelCaseToUnderscoresNamingStrategy

해당 전략은 필드 네임이 CamelCase 로 되어있으면 자동으로 snake_case 로 변경해주는 기능이다.

문제는 대부분의 DB 테이블 컬럼이 snake_case 로 되어있었는데, 일부 테이블에서의 컬럼은 CamelCase 로 되어있었다..
그래서 처음에는 CamelCase 로 된 녀석만 따로 @Column(name = “camelNaming”) 을 해주면 되겠지 했는데 적용이 안되었다.
추측으로는 적용 순서가 @Column name 으로 지정한 이름으로 바뀐 후, 네이밍 전략이 적용되는게 아닌가 싶음..

그래서 네이밍 전략을 PhysicalNamingStrategyStandardImpl 로 수정하는 방법이 있다.
요 전략은 필드 네이밍 그대로 컬럼명을 사용하는 것이다.
그런데 이렇게 하면 snake_case 로 된 필드는 @Column(name=“snake_naming”) 으로 수정해줘야하는 불편함이 있다.

해결

네이밍 전략은 CamelCaseToUnderscoresNamingStrategy 로 두고,
CamelCase 로 되어있는 컬럼만 따로 소문자 네이밍으로 명시해준다. (이름이 CamelCase 라도 소문자로 쿼리를 조회할 수 있는 특성을 이용)

@Entity
public class User {

  @Column(name = "userid")
  private long userId;
}

이렇게하면 CamelCase 컬럼으로 된 녀석들만 따로 지정해주면 되니, 좀 더 편하다.
애초에 모든 테이블 컬럼 네이밍을 snake_case 로 지정했으면 될 것 같은데, 이상하게 특정 컬럼명이 CamelCase 인 게 있어서 삽질을 정리해봄ㅠ

반응형

'JPA' 카테고리의 다른 글

SpringBoot 3.0 에서의 Querydsl 적용  (0) 2023.08.31
Querydsl - 3편  (0) 2022.02.15
Querydsl - 2편  (0) 2022.02.08
Querydsl - 1편  (0) 2022.02.08
JPA 를 공부하면서 알게 된 내용 정리 4  (0) 2022.02.05

댓글