블로그 이미지
Max.

calendar

          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            

Notice

2015.09.22 17:34 개발관련

도메인 객체에서 아래와 같은 관계시

A -> B -> C

 1: n   1:n

A 객체만 가져와도 하위 객체 모두 가져오게 하는 방법은 아래와 같이 사용한다.

public String toJsonAll() {

    return new JSONSerializer().exclude("*.class").deepSerialize(this);

}


실제 쿼리는 객체와 매핑된 테이블에 대한 outer join으로 데이터를 가져온다.


이때 각 객체와의 관계에 대한 구현체가 Set 또는 List로 할수 있는데, JSONSerializer deepSerialize 메서드에서는 둘의 결과값에 차이가 있다.


@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)

private Set<B> bs = new HashSet<B>();


or


@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)

private List<B> bs = new ArrayList<B>();


index 가 있는 List는 순회하는 만큼의 row가 들어가게 되고(JSONSerializer의 버그로 보인다), Set은 의도된 row만 들어있다. 


따라서 spring roo(1.3.1.R 버전) 를 사용한 JSONSerializer deepSerialize 사용시 1:n 관계에서는 List를 사용하면 안된다.



저작자 표시
신고
posted by Max.
2015.09.18 11:24 개발관련

1) 아래 처럼 도메인 객체 코드를 넣고(Array 예시)


    public static String toJsonArrayAll( Collection<XXX_SpuerDomain> collection ) {

        return new JSONSerializer().exclude("*.class").deepSerialize(collection);

    }


2) 아래처럼 리턴하면 된다.


return new ResponseEntity<String>(XXX_SpuerDomain.toJsonArrayAll(list),headers, HttpStatus.OK);  


3) 도메인 객체 자체가 복잡해서 선별된 의존관계 객체값만 리턴하고 싶다면, 아래처럼 기존에 생된된 메서드를 이용하는데 fields 값을 보내고 싶은 객체의 필드명을 넣으면 된다.


XXX_SpuerDomain.toJsonArray(collection, fields)


저작자 표시
신고
posted by Max.
2015.09.18 11:16 개발관련

spring roo 1.3.1 버전에서


1) Test 클래스에 @WebAppConfiguration 추가

2) pom.xml 의 servlet dependency 를  3.0.1로 변경


끝.

저작자 표시
신고
posted by Max.
prev 1 2 3 4 5 ... 175 next

티스토리 툴바