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 |
댓글