سؤال

لقد حذفت بعض الكود (تصريحات الحزمة، الواردات، حقول أخرى) لضيق. لدي هنا علاقة واحدة بسيطة. عملت بشكل جيد حتى هذه اللحظة.

@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 عنوان ولكن في DataStore يحتوي كل مطعم على الحد الأدنى من عناوين 2.

هل لديك أي شخص نفس المشكلة أو يعرف الحل؟

هل كانت مفيدة؟

المحلول 2

إذا كان لدى شخص ما المشكلة نفسها:

يحل محل

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

مع

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

طريقة اخرى هو أنه يجب عليك "لمس" عناصر الملكية لكل مطعم في القائمة المستردة قبل إغلاق PersistSentManager. بعد الإغلاق Persistenager، لا يمكنك استرجاع أي شيء من DataStore والمطعم يبقي NULL.

وجدت الحل بمساعدة جوجل appengine-java المستخدمين.

نصائح أخرى

هل أنت متأكد من أن العناوين غير كسول محملة؟ مجرد تخمين ... هل هناك طريقة لإجبار "حريصة" على تحميل الكائنات

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top