티스토리 뷰

mybatis의 연관관계 lazyloading을 사용할때 각 객체간의 부모 자식간의 데이터를 무한로딩하는 현상이 발생할때가 있다.
이 현상의 주 원인은 toString() 때문이다.
개발할때 vo객체에 toString을 재정의하여 사용하는경우가 있는데
이때 연관관계를 맺어놓은 객체까지 찍어버리면 이런현상이 일어난다.
만약 ToStringBuilder 를 이용해서 객체의 값들을 찍게 해놓았다면 지워주자.
dwr에서도 마찬가지현상이 일어날수 있는데 이때는 한가지(부모나자식) 객체를 exclude 시켜버리면 된다.(아래글참조)
---------------------------------------------------------------------------------------------------

dwr에서는 <dwr:convert.. 를 이용해서 dwr객체에서 리턴하는 객체의 타입을 구별하여 객체가 가진 속성을
javascript 의 object attribute로 추가한다.
그런데 mybatis나 ibatis, hibernate 같은 최근 orm프렘웍에서는 객체들간의 연관관계를 가지도록 설정을 하여
lazyloading을 사용한다.
이때 dwr에서 연관관계에 있는 객체를 컨버팅에서 제외하지 않으면 무한루프가 도는 현상이 발생한다.
<dwr:exclude 태그로 연관관계에 있는 객체를 컨버팅대상에서 제외시켜줘야한다.
보통 연관관계가 부모 <-> 자신 <-> 자식 관계로 관계를 갖는데,
부모와 자식 두개의 속성이 컨버팅될때가 문제가 된다. 고로 한쪽만 컨버팅대상에서 제외시켜주면 무한루프가 발생하는 현상은 피할수 있음!
dwr에서는 object에 고유id를 부여해서 이미 load된 object인경우 다시 호출하지않도록 다음버전에서 패치가 되어야할듯..

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함