데이터베이스의 컬럼 이름을 카멜 케이스로 작성한 뒤에 엔티티를
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 매핑을 진행할 때 카멜 케이스 변수를 스네이크 케이스로 변경해서 데이터베이스에서 검색한다.