[오류] JPA 과 lombok 같이 사용시, 유의사항Web Program/Java2018. 8. 22. 14:50
Table of Contents
반응형
1. hashCode(), equals() 를 생성
2. static or transient 가 아닌 모든 필드들이 대상이 됨.
getter 가 있으면 자동으로 해당 메소드가 호출된다.
사용하지 않고 필드를 직접 호출하려면 doNotUseGetter=true
제외하는 속성
exclude = {"field1", "field2"}
포함하는 속성
of = {"field3", "field4"}
SuperClass가 없을때, 사용하면 컴파일 에러
SuperClass도 lombok을 사용했다면 문제되지 않지만, 예상하지 못한 문제가 발생
JPA와 lombok을 함께 사용시, OneToOne, OneToMany... 등 양방향으로 설정하면
hashCode가 중복으로 생성되어 java.lang.StackOverflowError 오류가 발생된다.
무한 재귀로 계속 hashCode 함수가 호출된다.
@OneToOne 양방향
//Content.class
@OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "content")
private ContentDetail contentDetail;
//ContentDetail.class
@OneToOne(fetch = FetchType.LAZY)
private Content content;
아래와 같은 오류 발생
java.lang.StackOverflowError: null
at com.company.Content.hashCode(Content.java:40)
at com.company.ContentDetail.hashCode(ContentDetail.java:35)
at com.company.Content.hashCode(Content.java:40)
at com.company.ContentDetail.hashCode(ContentDetail.java:35)
at com.company.Content.hashCode(Content.java:40)
at com.company.ContentDetail.hashCode(ContentDetail.java:35)
...
exclude 속성으로 해당 필드를 제외 시키면 됩니다.
//ContentDetail.class
@Setter
@Getter
@EqualsAndHashCode(callSuper = false, exclude = {"content"})
@Table(name = "ContentDetail")
public class ContentDetail {
...
@OneToOne(fetch = FetchType.LAZY)
private Content content;
}
오류가 사라졌습니다, 썩세스!!
@달끄 :: 코트슈
코트슈(Code Troubleshooter) 프로그래머의 일상 Execution, Errors, Find, Solution 개발자들은 많은 오류로 시간을 허비한다... 코트슈가 도와드립니다.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!