2013-08-15 2 views
2

Play! 프레임 워크 2.1.3, 모델 레이어에 EBean 사용하기 Partial Object Query를 실행할 수 있고 결과를 사용자에게 다시 보내기 위해 JSON에 직렬화 할 때 un-selected 속성이 필요에 따라로드되지 않도록하고 싶다.Avaje - EBean - 부분 객체 쿼리 지연로드 사용 안 함

AutoFetch를 false로 설정하려고 시도했지만 JSON에 직렬화하기 전에 트랜잭션을 끝내려고했습니다. (트랜잭션이 비활성 상태가되는 오류가 발생했습니다.) 또한 내 모델 클래스에 @Lazy(false) 주석을 추가했습니다.

동일한 노트에서 나는 또한 일대 다 (one-to-many) 연관성이 있으며 그 중 첫 번째 3 행을 쿼리하고자하는데, 나는 new FetchConfig().queryFirst(2)을 사용했지만 같은 게으른 로딩 문제로 인해 결국 전체 관련 연관 행 당신이 얻을 또는 속성을 설정

부분 개체 게으른로드 수요에 나머지 데이터는 때없는 것 : 설명서를 보면

, 나는이 ( EBean Partial Objects)를 참조하십시오.

이 문제를 해결할 방법이 있습니까?

답변

0

지연로드가 필요하지 않은 쿼리에 StatementsResultSets을 사용하는 표준 JDBC 인터페이스를 사용하여이 문제를 해결했습니다.

부수적으로 스칼라의 경우 직접 필드 액세스는 지연로드를 사용하지 않지만 불행히도 내 응용 프로그램에 사용하는 언어가 아닙니다.

1

두 가지 대안이 있습니다.

옵션 1) Ebean의 JSON 지원 기능을 사용하여 Jackson 코어를 사용합니다. Ebean의 JsonContext에는 여러 가지 라이터 옵션이 있습니다.

쿼리와 JSON에 모두 적용되는 PathProperties를 사용한 예제입니다.

PathProperties pathProperties = 
     PathProperties.parse("(id,status,name,shippingAddress(id,line1,city),billingAddress(*),contacts(*))"); 

List<Customer> customers = Ebean.find(Customer.class) 
    .apply(pathProperties) 
    .findList(); 

String jsonString = Ebean.json().toJson(customers, pathProperties); 

옵션 2) 버전 6.2.2에서 사용 가능한 새 기능을 어디 수있는 쿼리에) setDisableLazyLoading (사실.

참조 : https://github.com/ebean-orm/avaje-ebeanorm/issues/360