سؤال

أرى سؤال مماثل في مشاكل أثناء حفظ كائن مستمر مسبقا في محرك تطبيق Google (Java), ، وفي الواقع لم أكن أتصل بإغلاق () في مدير الثبات. ومع ذلك، فإنني أتصل الآن بإغلاق، لكن تحديث كائن الخاص بي لا يستمر. على وجه التحديد، أريد إزالة عنصر من مجموعة، وحفظ تلك المجموعة الأصغر. فيما يلي رمز مدير الثبات المرتبط، لا يلقي استثناء، ولكن لا ينقذ بياناتي:

    UserService userService = UserServiceFactory.getUserService();
    User user = userService.getCurrentUser();

    PersistenceManager pm = PMF.get().getPersistenceManager();
    UserProfileInfo userProfile = pm.getObjectById(UserProfileInfo.class,user.getUserId());
    int presize = userProfile.getAccounts().size();
    AccountInfo ai = userProfile.removeAccount(id);
    int postsize = userProfile.getAccounts().size();
    UserProfileInfo committed = (UserProfileInfo)pm.makePersistent(userProfile);
    int postcommitsize = committed.getAccounts().size();
    pm.close();

وهنا هو الجزء ذي الصلة من فئة UserProfileInfo:

@PersistenceCapable(identityType = IdentityType.APPLICATION)
class UserProfileInfo {
  @Persistent
  private Set<AccountInfo> accounts;

public AccountInfo removeAccount(Long id) throws Exception {
    Iterator<AccountInfo> it = accounts.iterator();
    StringBuilder sb = new StringBuilder();
    while(it.hasNext()) {
        AccountInfo acctInfo = it.next();
        Long acctInfoId = acctInfo.getId();
        if(acctInfoId.equals(id)) {
            it.remove();
            return acctInfo;
        }
        sb.append(" ");
        sb.append(acctInfoId);
    }
    throw new Exception("Cannot find id " + id + " Tried " + sb.toString());
  }
}
هل كانت مفيدة؟

المحلول

لذلك يبدو أن الإجابة مملوكة كائنات لا يمكن استخدام مفتاح أساسي طويل. أخبرني محسن Datanucleus هذا عن نوع كائن آخر أضفته. لست متأكدا من السبب في تخطي هذا التحذير عن كائن AccountInfo الخاص بي.

لقد قمت بتبديل مفتاحي إلى سلسلة، وقمت بتغيير التعليقات التوضيحية لاستخدام السلسلة بشكل صحيح، والآن أنا قادر على حذف من المجموعة.

نصائح أخرى

كنت أعتقد أن أول شيء يجب القيام به عند تصحيح أي شيء سيكون هو البحث في السجل (مستوى التصحيح). يخبرك ما تنص على الكائنات في النقاط المختلفة. إذن ما هي الدولة عند الاتصال بأسماء الأذكانية ()؟ و بعد ؟ وما يحدث عند الاتصال PM.Close () ...

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