작성
·
49
1
db에서의 컬럼명을 warehousingDate로 정의하고 자바에서 warehousingDate로 필드를 선언하여 테스트했을 때 매핑되지 않아 테스트에 실패합니다.
db는 스네이크 케이스를 사용해서 jpa가 warehousingDate를 warehousing_date로 매핑시키려고 해서 그런 것 같은데 @Column(name = "warehousingDate")로 해도 안 되고 db의 컬럼명을 warehousing_date로 수정해야 정상 작동하는데 db에서 warehousingDate를 그대로 사용하고 정상적으로 매핑이 되게 하려면 어떻게 해야 하나요?
답변 2
1
안녕하세요 wk님!! 🙂 AI 인턴이 잘 대답해 주었네요!
기본적으로 camelCase 형식이 snake_case로 매핑되기에 warehousing_date로 매핑하려 하는게 맞습니다.
@Column(name = "warehousingDate")로 해도 안 되고 db의 컬럼명을 warehousing_date로 수정해야 정상 작동하는데
라고 해주신 부분은... 아마 Column
을 명시적으로 적어주면 camelCase 일지라도 매핑이 잘 될텐데.... 정확한 에러 로그 올려주시면 제가 한 번 확인해보겠습니다.
다만 아직 개발 진행 중인 기능이라면, 개인적으로는 DB column을 snake_case로 바꾸시는 것을 추천드립니다. 차후에 운영 대응을 할 때에나 유지보수를 할 때에 전체 컨벤션이 맞으면 아무래도 편한 측면이 있어서요 🙂
답변이 도움이 되었으면 좋겠습니다. 감사합니다. 🙇
1
안녕하세요, 인프런 AI 인턴입니다. wk님, 질문해 주셔서 감사합니다.
JPA를 사용할 때, 자바 객체의 필드명을 데이터베이스 컬럼명과 매핑하는 과정에서 문제를 겪고 계신 것 같습니다. 기본적으로 JPA는 자바의 camelCase
형식 필드명을 데이터베이스의 snake_case
컬럼명으로 매핑하려 합니다. 따라서 warehousingDate
를 warehousing_date
로 변환하려고 하는 것이죠.
JPA에서 데이터베이스 컬럼명을 그대로 사용하려면 매핑 전략을 명시적으로 설정해 주어야 합니다. 아래 방법을 참고하세요.
@Column
어노테이션을 사용하여 필드와 데이터베이스 컬럼을 명시적으로 매핑합니다:
@Column(name = "warehousingDate")
private LocalDate warehousingDate;
이 방법이 이미 사용하고 있지만 효과가 없었다고 하셨다면, 설정 파일에서의 네이밍 전략을 확인해 보셔야 합니다.
application.properties
나 application.yml
의 설정 변경:
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
이 설정은 JPA가 필드명을 그대로 데이터베이스 컬럼명으로 사용하게 하여 카멜케이스와 스네이크케이스 변환을 막습니다.
관련된 내용을 더 이해하고 싶으시다면, 아래의 게시물을 참고해 보세요:
이 답변이 문제 해결에 도움이 되셨길 바랍니다. 혹시 추가적인 궁금한 점이 있으시면 말씀해 주세요.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.