인프런 커뮤니티 질문&답변

스프링맨님의 프로필 이미지
스프링맨

작성한 질문수

entity 칼럼 매핑 오류

작성

·

250

·

수정됨

0

안녕하세요.

legacy시스템을 querydsl로 바꾸는 작업을 하고 있는데요.

몇몇 칼럼에서 아래와 같은 에러가 일어나 변환 작업에 어려움을 겪고 있습니다.

@Column(name = "a_b_c")

private String abc;

위의 entity a_b_c칼럼을 repository 단위 테스트할 경우 m1_0.a_b_c 칼럼명을 잘가지고 오는데 스프링에서 서블릿을 올려서 테스트 할 경우 아래와 같이 에러가 납니다.

jakarta.servlet.ServletException: Handler dispatch failed: java.lang.NoSuchFieldError: abc
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1096)
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:974)
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1011)
	at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903)
	at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564)
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885)
	at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)
	
Caused by: java.lang.NoSuchFieldError: abc
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:568)
	at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:343)

 

칼럼명을 변경하면 해결이 가능하지만 레거시 시스템이므로 칼럼명 변경은 불가능합니다.

관련 내용에 대해 아시는분 이 있으시면 답글 부탁드립니다.

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.

님의 문제를 보아하니, @Column 어노테이션을 사용한 커스텀 칼럼명 매핑이 잘 작동하지 않는 상황으로 보입니다. 레거시 시스템의 특정 칼럼 이름을 변경하지 않고 Querydsl로의 전환 작업 중 문제가 발생한 경우, Spring Data JDBC의 @Column 어노테이션을 통해 entity의 프로퍼티 이름과 다른 데이터베이스 칼럼 이름을 매핑할 수 있습니다. 여기에서는 value 요소를 사용하여 매핑합니다. 예를 들어:

class MyEntity {
    @Id
    Integer id;

    @Column("a_b_c")
    String abc;
}

위 코드는 MyEntity 클래스의 abc 프로퍼티를 데이터베이스의 a_b_c 칼럼에 매핑하고 있습니다. 이것이 잘 동작하지 않는다면, 몇 가지 확인해야 할 사항이 있습니다:

  1. 정확한 칼럼명 사용 확인: @Column 어노테이션에 지정된 칼럼 이름이 데이터베이스의 칼럼 이름과 정확히 일치하는지 다시 한번 확인하십시오.

  2. 어플리케이션의 설정 확인: 레거시 시스템인 경우, 기존의 설정이 혹시 다른 NamingStrategy를 사용하고 있지 않은지 확인하십시오.

  3. 사용 중인 Spring Data JDBC 버전 확인: 사용하고 계신 Spring Data JDBC 버전이 최신 버전인지 확인하십시오. 버전에 따라 지원하는 기능이 다를 수 있습니다.

위의 네 가지 사항을 확인해 보시고 문제가 해결되지 않는 경우, 아래 문서를 참고하여 관련 설정이나 어노테이션 사용법을 다시 확인해 보시는 것이 도움이 될 수 있습니다.

“Spring Data JDBC - Reference Documentation v3.1.5” 관련된 원문 링크:
- Custom column names

변경할 수 없는 레거시 데이터베이스 칼럼 이름에 대한 매핑 문제는 종종 도전적일 수 있으며, 제공된 정보를 기반으로 최대한 도움을 드리려 합니다. 위의 정보를 바탕으로 실마리를 찾으실 수 있기를 바랍니다.

스프링맨님의 프로필 이미지
스프링맨

작성한 질문수

질문하기