2012-05-29 2 views
4

를 사용하여 이물질을 자동으로 새로 고침하지 않습니다 내가ORMLite 여기 내 문제의 foreignAutoRefresh

@DatabaseField(foreign = true, foreignAutoRefresh = true) 

주석이되어 모든 객체 3. 내 모든 외국 분야의 중첩 깊이에 다른 사람까지 연결된 다른 기관이 그러나 중첩 깊이가 2 인 경우에만 실제 autoRefreshed 이물질을 얻습니다. 예를 들어

, 내가하는 A 엔티티를 조회 한 후 내가 할 경우 : 엔티티

A.getB().getC().getD() 

B 엔티티에 대한 DI 만 ID를 가져올 있고 내가 필요 동안 CI는 이미 모든 필드를 모든 D 필드를 가져 오기 위해 dao.refresh() 메소드를 호출하십시오. 그것은 한계입니까? 나는 그 문서에 대해 아무 것도 찾을 수 없다.

+1

@Andrea의 답을 업데이트했습니다. 불행히도 ORMLite의 버그였습니다. – Gray

답변

3

C 엔터티에 maxForeignAutoRefreshLevel = 3 주석 특성을 추가하여이 문제를 해결했으며 D가 새로 고쳐집니다.

이상한 것은 내가 어느 쪽도에 maxForeignAutoRefreshLevel를 설정할 필요하지 않은 것입니다, B 또는 D

또 다른 세부 내가 2로 C 실체에 대한 수준을 설정 한 경우, D는하지 않는다는 것입니다 더 이상 상쾌 해. maxForeignAutoRefreshLevel = 3이 C 엔티티에서 "시작"엔티티로 적용된 것처럼 보입니다.

5

편집 :

그래서 더 좋은 단위 테스트를 만들고이 더에보고 한 후,이 버그로 밝혀졌다. ORMLite@DatabaseField 주석의 maxForeignAutoRefreshLevel 설정을 잘못 처리하고있었습니다. 지금 당장 (대답을 찾은 것 같아서) B 개체의 C 필드와 C 개체의 D 필드에 foreignAutoRefresh = truemaxForeignAutoRefreshLevel = 3을 추가해야합니다. 그것은 그것을 고쳐야한다. 나는 트렁크에 문제를 해결 한 나는 버전 4.41을 추진하는 과정을 시작했습니다

https://sourceforge.net/tracker/?func=detail&aid=3530801&group_id=297653&atid=1255989

:

나는 다음과 같은 버그 리포트를 만들었습니다. 마지막 출시 이래로 얼마간이되었습니다.

+0

답변 해 주셔서 감사합니다. 이 주석을 어디에서 사용해야합니까? 나는 A 실체의 B 필드를 추측한다. 그래서 @DatabaseField (foreign = true, foreignAutoRefresh = true, maxForeignAutoRefreshLevel = 4) 이 예상대로 작동하지 않습니다 (새로 고침되지 않음). –

+0

Hrm. 그게 효과가있다. 쿼리를 수행 할 때만 새로 고침된다는 사실을 이해하고 있습니까? 단위 테스트를 확인하겠습니다. – Gray

+0

queryAll() 메서드를 사용하여 모든 A 객체를 검색합니다 (A는 B 외부 필드에서 maxForeignAutoRefreshLevel = 4를가집니다). 그러면 A.getB(). getC(). getD() <- 자동 갱신되지 않습니다. 어떤 단서? –