프로필 사진
깽쟈
bolt icon506·6년 이상·
7.0k
·수정됨
공유

jpa를 이용하여 json 데이터를 가져올 때 지연로딩을 이쁘게 커버하는 방법?

안녕하세요. jpa 입문하여 열심히 공부중입니다.

스프링 4, 스프링-데이터-jpa, jackson-databind, 하이버네이트 사용중입니다.

@ResponseBody를 이용하여 json 데이터를 가져오려고 하는데, 문제가 있습니다. Entity 중 fetch=FetchType.LAZY 로 설정해놓은 것들은 jackson-databind가 변환할 때 proxy를 못 찾는 오류가 발생합니다. 그래서 일단 json으로 변환하길 원하는 객체를 jpa로 불러와서 아무 의미 없는 명령을 하나 써넣는데요. 예를 들어

@Entity public class Scene { @Id private long id; private String sceneName; @ManyToOne(fetch=FetchType.LAZY) @JoinColumn(name="work_id") private Work work; }

위의 Entity를 가져오려고 할 때 다음과 같이 서비스 클래스를 만듭니다.

@Service public class SceneServiceImpl implements SceneService { public Scene getScene() { Scene scene = sceneRepository.findOne(1); Object temp = scene.getWork(); return scene; } }

return 바로 직전에 Object temp = scene.getWorks(); 이 부분인데요 ;;; (공부하는 사람이니 귀엽게 봐주세요)

저렇게라도 하지않으면 Lazy 로딩되어있는 것들이 불러와지지 않으니까 json이 계속해서 proxy 에러를 쏟아냅니다. 그렇다고, 기본 지연로딩 전략을 EAGER로 하지는 않을 생각입니다. 필요할 때에만 쓰여서요.

이런 경우 jpa를 사용하시는 분들은 보통 어떻게 처리하시나요? JPQL(QueryDSL)로 하시나요? 세련된 방법 부탁드립니다.

0
cat-footer