[JDBC] JPA 카멜 케이스

코딩은 돈이 된다·2024년 6월 7일
0

데이터베이스의 컬럼 이름을 카멜 케이스로 작성한 뒤에 엔티티를

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import lombok.Getter;

@Entity
@Getter
public class Customer {
    @Id
    private String cno;

    private String name;

    private String password;

    @Column(name = "phoneNumber")
    private String phoneNumber;

    public void login(String password) {
        if (password == null || !password.equals(this.password)) {
            throw new RuntimeException("비밀번호가 일치하지 않습니다.");
        }
    }
}

이렇게 작성해주었다. Column name을 명시해주었기 때문에 정상적으로 로그인이 진행될 것이라고 생각하였다.

하지만 리턴값으로 JDBC Exception이 나왔는데, phone_number라는 컬럼이 데이터베이스에 존재하지 않는다는 말이었다.

데이터베이스 내부에도 phoneNumber라고 되어있는데(물론 좋지 않은 방식이라는 것은 알고 있다.) phone_number를 왜 찾나 찾아보았다.

찾아보니 JPA가 자동으로 스네이크 케이스로 변환을 해주고 있었다..

다행히 spring jpa 기본 설정에 스네이크케이스 자동 변환을 끄는 코드가 있었다.

spring:
	jpa:
      hibernate:
        naming:
          implicit-strategy: org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl
          physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

이렇게 지정하면 해결이 된다!

JPA는 기본 설정으로 entity 매핑을 진행할 때 카멜 케이스 변수를 스네이크 케이스로 변경해서 데이터베이스에서 검색한다.

0개의 댓글