0

我正在構建一個基於谷歌應用程序引擎(Java)的應用程序,使用JDO進行持久化。如何在一個實體組中創建實體?

有人可以給我一個例子或指向我的一些代碼,它顯示了在一個事務中使用javax.jdo.PersistenceManager.makePersistentAll()持久化多個實體(同一類型)。

基本上我需要了解如何在一個實體組中放置多個實體,以便它們可以使用內部事務中的makePersistentAll()進行保存。

回答

0

感謝您的回覆尼克。

本文檔僅介紹了app引擎在其父子關係時隱式處理實體組。我想在事務中使用PeristentManager.makePersistentAll(list)保存多個相同類型的對象。如果對象不相同,則實體組引發異常。目前我能做到這一點,如下,但認爲必須有一個更好,更合適的方法來做到這一點 -

User u1 = new User("a"); 
UserDAO.getInstance().addObject(user1); 
// UserDAO.addObject uses PersistentManager.makePersistent() in transaction and user 
// object now has its Key set. I want to avoid this step. 

User u2 = new User("x"); 
u2.setKey(KeyFactory.createKey(u1.getKey(),User.class.getSimpleName(), 100 /*some random id*/)); 

User u3 = new User("p"); 
u3.setKey(KeyFactory.createKey(u1.getKey(), User.class.getSimpleName(), 200)); 

UserDAO.getInstance().addObjects(Arrays.asList(new User[]{u2, u3})); 
// UserDAO.addObjects uses PersistentManager.makePersistentAll() in transaction. 

儘管這種方式,這個問題是,你必須依賴於一個已經持久實體創建一個實體組。

1

我這樣做:

public static final Key root_key = KeyFactory.createKey("Object", "RootKey"); 

...

這樣一個典型的數據存儲持久化對象將設置在構造函數中的ID,而不是讓一個自動

public DSO_MyType(string Name, Key parent) 
    { 
     KeyFactory.Builder b = new KeyFactory.Builder(parent);; 
     id = b.addChild(DSO_MyType.class.getSimpleName() , Name).getKey(); 
    } 

和你傳遞作爲父級的root_key

我不確定您是否可以傳遞不同父母同一種

0

戈皮的對象,據我所知你沒有這樣做...這應該工作(沒有測試過):

List<User> userList = new ArrayList<User>(); 
userList.add(new User("a")); 
userList.add(new User("b")); 
userList.add(new User("c")); 
UserDAO().getInstance().addObjects(userList); 

此外,據我所知,這應該放所有這些對象都在同一個實體組中。我很想知道我是否錯了。

+0

在一個事務中,這不起作用。那就是我的問題提到的。 – Gopi 2010-03-30 03:56:28

相關問題