부자 되기 위한 블로그, 머니킹

요즘 스프링으로 열심히 프로젝트를 개발하고 있다. 개발하는 도중 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 옵션을 바꿔주는 성공적으로 잘 가져왔다