본문 바로가기
잡다구리

jpa: 컬럼의 네이밍 컨벤션 전략 - physical-strategy

by Growing! 2022. 8. 16.

Spring의 default PhysicalNamingStrategySpringPhysicalNamingStrategy 이며, lower_snake_case 를 사용한다.

참고로, SpringPhysicalNamingStrategy 는 Spring Boot 2.6 부터 deprecated 되었으며, CamelCaseToUnderscoresNamingStrategy 라는 이름으로 좀 더 직관적으로 교체되었다.

따라서 아무런 설정을 하지 않은 경우에는 다음과 같이 동작한다.

@Entity
public class Person {
    @Id
    private Long id;
    private String firstName;
    private String lastName;
}
create table person (       -- person
  id bigint not null,
  first_name varchar(255),  -- first_name
  last_name varchar(255),   -- last_name
  primary key (id)
);

참고로 Spring Boot의 기본 전략과 설정 방법은 다음과 같다.

spring:
  jpa:
    hibernate:
      naming:
        physical-strategy: org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy
        implicit-strategy: org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy

하이버네이트의 문서를 간략하게 요약하면...(https://docs.jboss.org/hibernate/orm/5.4/userguide/html_single/Hibernate_User_Guide.html#naming)

2.2. Naming strategies

객체 모델의 이름을 관계형 데이터베이스에서의 이름으로 매핑하는 것은 2단계로 처리된다:

  • 첫 번째 단계에서는 도메인 모델 매핑으로부터 적절한 논리적 이름을 결정한다. 논리적 이름은 개발자가 명시적으로(@Column or @Table ) 지정할 수 있으며, 명시적으로 지정하지 않은 경우에는 하이버네이트가 ImplicitNamingStrategy에 따라 묵시적으로 결정한다.
  • 두 번째 단계에서는 이 논리적 이름을 PhysicalNamingStrategy에 따라 물리적 이름으로 결정한다.

2.2.1 ImplicitNamingStrategy

엔티티나 엔티티의 속성에 명시적인 이름이 지정되지 않은 경우에는 org.hibernate.boot.model.naming.ImplicitNamingStrategy 에 따라 논리적 이름을 결정한다.

2.2.2 PhysicalNamingStrategy

논리적 이름이 어떤 기준으로(명시적, 묵시적) 결정된 것인지와는 무관하게, 물리적인 컬럼명을 결정하는 정책이다.

(좀 더 자세한 설명은 원문 참고)

댓글