2009-04-17 3 views
6

Google App Engine ve devam seçeneği JDO ile denemeler yapıyorum. Geçici bir nesneyi kalıcı bir nesneyle eşlemek mümkün olup olmadığını bilmek ister misiniz? Ya da kalıcı nesneyi geçici nesnenin kullanımıyla güncellemek için bir şey var mı? JDO - Bir Nesne Güncelleme

Ben kodlama i aşağıdaki kod parçası nesneleri güncelleştirmek için bkz örnekler

: JPA yaptığı gibi ben bütün nesneyi güncelleyebilirsiniz eğer

public void updateEmployeeTitle(User user, String newTitle) { 
PersistenceManager pm = PMF.get().getPersistenceManager(); 
try { 
    Employee e = pm.getObjectById(Employee.class, user.getEmail()); 
    if (titleChangeIsAuthorized(e, newTitle) { 
     e.setTitle(newTitle); 
    } else { 
     throw new UnauthorizedTitleChangeException(e, newTitle); 
    } 
} finally { 
    pm.close(); 
} 
} 

Ama bu ne istediğimi değil, herkes biliyor: nesne. güncelleştirme();

Yani ben böyle bir şey istiyorum: datastore'una bunu bulmak için bir yolu yoktur bu yüzden

public User update(User u) { 
    PersistenceManager pm = PMF.get().getPersistenceManager(); 
    User usr; 
    try { 
     usr = pm.getObjectById(User.class, u.getId()); 
     // copy transient object u to persist object usr. 
        // on update of usr all changes in object u are persistent. 

    } finally { 
     pm.close(); 
    } 

    return u; 
} 

cevap

2

Bir "geçici" nesne "kimlik" vardır. Geçici nesneleri kullanmak istiyorsanız veya sadece müstakil nesneleri kullanmanın daha iyi olup olmayacağını düşünün. JPA, "müstakil" bir nesnenin eşdeğerini kullanır. JDO da bunu yapabilir ve sonra sadece pm.makePersistent (detachedObj); nesne zaten (daha önce bir web formundan doldurulur veri deposuna, veya okuma örneğin) İD takımı olup olmadığını

--Andy (DataNucleus)

+0

makePersistent çalışmaz. – pjesi

+1

Nesne veri deposundan okunduğunda ve aynı işlemde ise, makePersistent'i çağırmanın hiçbir anlamı yoktur, herhangi bir değişiklik otomatik olarak veri deposuna konur. Nesne veri deposundan okunduktan sonra ayrıldıysa ve bir şey değiştirdiyseniz, makePersistent'i çağırmak, değişiklikleri eklediğinden kesinlikle "çalışır". Belirli sorunlarınız varsa, bunları Google'ın appengine grubuna bildirmenizi öneririm – DataNucleus