요즘 스프링으로 열심히 프로젝트를 개발하고 있다. 개발하는 도중 JPA 관련 오류가 생겨 이를 해결하는 포스팅을 하려고 한다.
JPA 오류
@Entity
@Getter
@Setter
public class ProfileBlockTemplate {
@Id
@GeneratedValue
@Column(name = "profile_bt_id")
private Long id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "member_id")
Member member;
// @OneToMany(mappedBy = "profileBlockTemplate")
// private List<ProfileTemplateComponent> profileTemplateComponents;
@Column(name = "profile_bt_name")
private String name;
@Column(name = "profile_bt_contents")
private String contents;
@Column(name = "profile_bt_types")
private String types;
@Column(name = "profile_bt_kinds")
private String kinds;
}
일단 이렇게 Entity를 등록시켜놨는데 아무래도 FETCHTYPE이 문제가 되는 것 같다.
public List<ProfileBlockTemplate> findAll() {
log.info("ProfileBlockTemplate findAll");
return em.createQuery("select pbt from ProfileBlockTemplate pbt", ProfileBlockTemplate.class)
.getResultList();
}
ProfileBlockTemplateRepository에서 모든 DB 요소들을 가져오는 코드 부분에서 오류가 났는데 데이터를 찾아오고 실제 프론트로 보낼때 오류가 나는것 같다.
@ManyToOne(fetch = FetchType.LAZY)
=> @ManyToOne(fetch=FetchType.EAGER)
LAZY 옵션은 실제로 데이터를 쓸 때 조회를 하겠다는 것이고 EAGER로 하면 데이터를 찾는 시점에서 즉시 해당 데이터들을 조회해서 가지고 온다. LAZY 옵션을 바꿔주는 성공적으로 잘 가져왔다