JPA 의 프록시에 대해서 정리해보자.
예전에 강의를 듣고 프록시 내용을 안다고 생각했다. 하지만 졸업작품 프로젝트를 하면서 프록시와 관련하여 문제가 발생하였고, 이를 제대로 해결하지도, 해결하고도 정확히 이해를 하지도 못했다.
시간에 쫓긴다 생각하고, “나중에 시간 내서 따로 공부하자” 라고 생각하고 정리를 제대로 하지 않았다.
(아마 시간이 지나도 안했을 것이다.)
이후 코드살롱 모임 시간에 발생했던 문제와 해결 방법을 말씀드렸지만, 이와 관련된 질문에 제대로 답변을 드리지 못했다. 그래서 늦게라도 정리하기로 마음 먹었고 정리를 해보았다.
다음과 같이 Board 엔티티와 Member 엔티티가 있었다.
Board 와 Member 는 1:N 관계로 서로 연관이 되어있었다.
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Board {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "board_id", nullable = false)
private Long id;
@Column(nullable = false)
private LocalDateTime creatingDateTime;
**@ManyToOne(fetch = FetchType.LAZY) -> 이 부분 추가 후 에러 발생**
@JoinColumn(name = "member_id")
private Member writer;
@Embedded
private Title title;
@Embedded
private Content content;
//...
}
@Entity
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class Member {
@Id
@Column(name = "member_id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false)
private String alias;
//...
}
내가 Board 쪽에서 @ManyToOne(fetch = FetchType.LAZY) 라고 LAZY로딩으로 패치 타입을 추가하면서 문제가 발생하였다.