작성
·
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
칼럼에 매핑하고 있습니다. 이것이 잘 동작하지 않는다면, 몇 가지 확인해야 할 사항이 있습니다:
정확한 칼럼명 사용 확인: @Column
어노테이션에 지정된 칼럼 이름이 데이터베이스의 칼럼 이름과 정확히 일치하는지 다시 한번 확인하십시오.
어플리케이션의 설정 확인: 레거시 시스템인 경우, 기존의 설정이 혹시 다른 NamingStrategy를 사용하고 있지 않은지 확인하십시오.
사용 중인 Spring Data JDBC 버전 확인: 사용하고 계신 Spring Data JDBC 버전이 최신 버전인지 확인하십시오. 버전에 따라 지원하는 기능이 다를 수 있습니다.
위의 네 가지 사항을 확인해 보시고 문제가 해결되지 않는 경우, 아래 문서를 참고하여 관련 설정이나 어노테이션 사용법을 다시 확인해 보시는 것이 도움이 될 수 있습니다.
“Spring Data JDBC - Reference Documentation v3.1.5” 관련된 원문 링크:
- Custom column names
변경할 수 없는 레거시 데이터베이스 칼럼 이름에 대한 매핑 문제는 종종 도전적일 수 있으며, 제공된 정보를 기반으로 최대한 도움을 드리려 합니다. 위의 정보를 바탕으로 실마리를 찾으실 수 있기를 바랍니다.