일대일 관계. DataStore에서 객체를 선택하십시오
-
19-09-2019 - |
문제
부족에 대한 일부 코드 (패키지 선언, 수입, 기타 필드)를 생략했습니다. 나는 여기에 간단한 일대일 관계가 있습니다. 지금까지 잘 작동했습니다.
@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 사용자.
다른 팁
주소가 게으른로드되지 않았다고 확신합니까? 그냥 추측 ... 물체의 "열심 인"하중을 강요 할 수있는 방법이 있습니까?
제휴하지 않습니다 StackOverflow