Spring의 default PhysicalNamingStrategy
는 SpringPhysicalNamingStrategy
이며, 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
논리적 이름이 어떤 기준으로(명시적, 묵시적) 결정된 것인지와는 무관하게, 물리적인 컬럼명을 결정하는 정책이다.
(좀 더 자세한 설명은 원문 참고)
'잡다구리' 카테고리의 다른 글
resilience4j: CircuitBreaker configuration 간단 정리 (0) | 2022.08.18 |
---|---|
p8s: Spring Boot에서 Prometheus 메트릭 노출하기 (0) | 2022.08.18 |
Spring: @DataJpaTest (0) | 2022.08.14 |
Validation with Spring Boot - the Complete Guide (0) | 2022.08.14 |
Spring: @ConfigurationProperties (0) | 2022.08.14 |
기초부터 다지는 ElasticSearch 운영 노하우 : 스터디 기록 (0) | 2022.08.13 |
Hexagonal Architecture with Java and Spring (0) | 2022.08.13 |
Building a Multi-Module Spring Boot Application with Gradle (0) | 2022.08.13 |
댓글