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
반응형