Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在一个实体组中创建实体?_Java_Google App Engine_Jdo_Entity Groups_Entity Group Transactions - Fatal编程技术网

Java 如何在一个实体组中创建实体?

Java 如何在一个实体组中创建实体?,java,google-app-engine,jdo,entity-groups,entity-group-transactions,Java,Google App Engine,Jdo,Entity Groups,Entity Group Transactions,我正在基于GoogleAppEngine(Java)构建一个应用程序,使用JDO实现持久性 有没有人能给我举个例子,或者让我看一些代码,这些代码显示了在一个事务中使用javax.jdo.PersistenceManager.makePersistentAll()持久化多个实体(相同类型) 基本上,我需要了解如何将多个实体放在一个实体组中,以便在事务内部使用makePersistentAll()保存它们。的文档正好处理了这一点。感谢您的回复 本文档仅讲述应用程序引擎在其为父子关系时对实体组的隐式处

我正在基于GoogleAppEngine(Java)构建一个应用程序,使用JDO实现持久性

有没有人能给我举个例子,或者让我看一些代码,这些代码显示了在一个事务中使用javax.jdo.PersistenceManager.makePersistentAll()持久化多个实体(相同类型)


基本上,我需要了解如何将多个实体放在一个实体组中,以便在事务内部使用makePersistentAll()保存它们。

的文档正好处理了这一点。

感谢您的回复

本文档仅讲述应用程序引擎在其为父子关系时对实体组的隐式处理。我想在一个事务中使用PeristentManager.makePersistentAll(列表)保存多个相同类型的对象。如果对象不是同一实体组,则引发异常。目前,我可以按以下方式做,但我认为必须有更好、更合适的方法来做-

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.
尽管这种方法可行,但问题是您必须依赖已经存在的实体来创建实体组。

我这样做:

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

因此,典型的数据存储持久对象将在构造函数中设置id,而不是自动获取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作为父项传递


我不确定是否可以将不同的父对象传递给相同类型的对象

Gopi,好吧,您不必这样做。。。这应该有效(尚未测试):

List userList=new ArrayList();
添加(新用户(“a”);
添加(新用户(“b”);
添加(新用户(“c”);
UserDAO().getInstance().addObjects(userList);

同样,好的,这应该把所有这些对象放在同一个实体组中。我很想知道我是否错了。

在交易中,这不起作用。这就是我的问题所提到的。
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);