1 対多の関係。データストアからオブジェクトを選択する
-
19-09-2019 - |
質問
短さのためにいくつかのコード(パッケージ宣言、輸入、その他のフィールド)を省略しました。ここには単純な 1 対多の関係があります。この瞬間まではうまくいきました。
@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つの住所がありますが、データストアではすべてのレストランには最低2つの住所があります。
同じ問題を抱えている人、または解決策を知っている人はいますか?
解決 2
誰かが同じ問題を抱えている場合:
交換する
@Persistent(mappedBy = "restaurant")
List<RestaurantAddress> addresses = new
ArrayList<RestaurantAddress>
と
@Persistent(mappedBy = "restaurant",defaultFetchGroup = "true")
List<RestaurantAddress> addresses = new
ArrayList<RestaurantAddress>
別の方法 PersistentManagerを閉じる前に、取得したリストのすべてのレストランのプロパティを「タッチ」する必要があるということです。PersistenManagerが閉鎖された後、DataStoreから何も検索できず、レストランはNULLを保持できません。
の助けを借りて解決策が見つかりました google-appengine-java ユーザー。
他のヒント
あなたはアドレスが遅延ロードされないことを確認していますか?ただの推測...オブジェクトの「熱心な」ロードを強制的にいくつかの方法があります。
所属していません StackOverflow