我正在構建一個基於谷歌應用程序引擎(Java)的應用程序,使用JDO進行持久化。如何在一個實體組中創建實體?
有人可以給我一個例子或指向我的一些代碼,它顯示了在一個事務中使用javax.jdo.PersistenceManager.makePersistentAll()持久化多個實體(同一類型)。
基本上我需要了解如何在一個實體組中放置多個實體,以便它們可以使用內部事務中的makePersistentAll()進行保存。
我正在構建一個基於谷歌應用程序引擎(Java)的應用程序,使用JDO進行持久化。如何在一個實體組中創建實體?
有人可以給我一個例子或指向我的一些代碼,它顯示了在一個事務中使用javax.jdo.PersistenceManager.makePersistentAll()持久化多個實體(同一類型)。
基本上我需要了解如何在一個實體組中放置多個實體,以便它們可以使用內部事務中的makePersistentAll()進行保存。
感謝您的回覆尼克。
本文檔僅介紹了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.
儘管這種方式,這個問題是,你必須依賴於一個已經持久實體創建一個實體組。
This section正確處理文檔。
我這樣做:
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
我不確定您是否可以傳遞不同父母同一種
戈皮的對象,據我所知你沒有這樣做...這應該工作(沒有測試過):
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);
此外,據我所知,這應該放所有這些對象都在同一個實體組中。我很想知道我是否錯了。
在一個事務中,這不起作用。那就是我的問題提到的。 – Gopi 2010-03-30 03:56:28