質問

短さのためにいくつかのコード(パッケージ宣言、輸入、その他のフィールド)を省略しました。ここには単純な 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 ユーザー。

他のヒント

あなたはアドレスが遅延ロードされないことを確認していますか?ただの推測...オブジェクトの「熱心な」ロードを強制的にいくつかの方法があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top