문제

부족에 대한 일부 코드 (패키지 선언, 수입, 기타 필드)를 생략했습니다. 나는 여기에 간단한 일대일 관계가 있습니다. 지금까지 잘 작동했습니다.

@PersistenceCapable(identityType = IdentityType.APPLICATION,
detachable="true")
class Restaurant implements Serializable {

 @PrimaryKey
 @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
 Key id

 @Persistent(mappedBy = "restaurant")
 List<RestaurantAddress> addresses = new ArrayList<RestaurantAddress>()
}

//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

@PersistenceCapable(identityType = IdentityType.APPLICATION,
detachable="true")
class RestaurantAddress implements Serializable {

 @PrimaryKey
 @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
 Key id

 @Persistent
 Restaurant restaurant
}

이제 DB의 모든 레스토랑을 가져와야합니다.

def getRestaurantsToExport(final String dst, final int count) {
   String field = restaurantExportFields[dst]
   return transactionExecute() { PersistenceManager pm ->
     Query q = pm.newQuery(Restaurant.class)
     q.filter = "$field == null"
     q.setRange(0, count)
     return q.execute()
   }
 }

그러나 문제가 있습니다 - 쿼리는 12 개의 레스토랑 (DB에서와 같이)을 제공하지만 모든 레스토랑에는 0 주소가 0 개 있지만 DataStore에는 모든 식당에는 최소 2 개의 주소가 있습니다.

같은 문제가 있거나 해결책을 알고 있습니까?

도움이 되었습니까?

해결책 2

누군가 같은 문제가있는 경우 :

바꾸다

@Persistent(mappedBy = "restaurant")
 List<RestaurantAddress> addresses = new
ArrayList<RestaurantAddress>

~와 함께

@Persistent(mappedBy = "restaurant",defaultFetchGroup = "true")
 List<RestaurantAddress> addresses = new
ArrayList<RestaurantAddress>

또 다른 방법 PersistentManager를 폐쇄하기 전에 검색된 목록의 모든 식당의 재산을 "터치"해야합니다. PersistenManager가 폐쇄 된 후에는 데이터 스토어에서 아무것도 검색 할 수 없으며 레스토랑은 널을 유지합니다.

도움으로 찾은 솔루션 Google-Appengine-Java 사용자.

다른 팁

주소가 게으른로드되지 않았다고 확신합니까? 그냥 추측 ... 물체의 "열심 인"하중을 강요 할 수있는 방법이 있습니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top