관리 메뉴

피터의 개발이야기

[Spring] @JsonIgnore과 @Transient 차이 때문에 발생한 could not extract ResultSet 문제 본문

Programming/Spring

[Spring] @JsonIgnore과 @Transient 차이 때문에 발생한 could not extract ResultSet 문제

기록하는 백앤드개발자 2021. 1. 25. 08:00
반응형

개발하면서 발생한 에러에 대한 정리입니다. JPA에서 데이터를 불러오는 쪽에서 에러가 발생하였습니다.

 

 

에러내용

2021-01-18 16:08:05.931 [http-nio-8080-exec-9] ERROR com.xxxxx.util.LoggerAspect [LoggerAspect.java:32] - 
  err=org.springframework.dao.InvalidDataAccessResourceUsageException: could not extract ResultSet; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: could not extract ResultSet
at org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:279)

 

원인 소스

@Getter
@Setter
@Entity
@Alias("scheduleRequestEntity")
@Table(name = "schedule_request")
public class scheduleRequestEntity {

    ~~~~ 중간 생략 ~~~~~~~~~
    
    @JsonIgnore
    private String scheduleDate;

    @Transient
    private String scheduleExceptRequestId; 
    
    ~~~~ 중간 생략 ~~~~~~~~~
}

뭐가  잘못되었는지 보이시나요?
JPA에서 데이터를 직렬화 하는 과정에서 해당 테이블에 없는 scheduleDate가 없어서 발생하는 에러였습니다.

 

scheduleDate는 데이터 조회 시 파라메터로 사용하였던 필드이기 때문에
데이터 직렬화 대상에서 제외시켜야 합니다.

하지만 @JsonIgnore과 @Transient를 명확히 알지 못해서 에러가 발생하였네요.

 

 

@JsonIgnore과 @Transient 차이

데이터 직렬화 시 직렬화 대상에서 제외시키는 점에서는 동일한 역할을 합니다.

@JsonIgnore가 표시된 필드는 JSON으로 직렬화 시 무시하는 데만 사용합니다.

JPA에서는 @JsonIgnore가 소용이 없고 @Transient를 붙여야 직렬화 과정에서 제외됩니다.

 

@JsonIgnore을 @Transient로 바꾸어 주면 에러는 발생하지 않습니다.

 

참조
https://java2020.com/q/rjxewypj
반응형
Comments