2010-03-01 33 views
0

我试图插入一个单一的交易,但无济于事/更新多个entites的。它总是抛出IllegalArgumentException。谷歌应用程序引擎的事务插入Java中

我想要做这样的事情。

Transaction tx = pm.currentTransaction(); 
tx.begin(); 

for(int i=0;i<10;i++) { 
    SampleEntity entity = new SampleEntity(i); 
    pm.makePersistent(entity); 
} 

tx.commit(); 

如果这是不可能的,是否有解决方法使其工作? 谢谢。

+1

哪一行抛出异常?你能提供堆栈跟踪吗? – cletus 2010-03-01 09:29:00

+0

嗨cletus,我已经发布了下面的stacktrace。感谢 – Link 2010-03-02 00:18:04

+0

javax.jdo.JDOFatalUserException:非法参数 在org.datanucleus.jdo.NucleusJDOHelper.getJDOExceptionForNucleusException(NucleusJDOHelper.java:344) 在org.datanucleus.jdo.JDOPersistenceManager.jdoMakePersistent(JDOPersistenceManager.java:674) 的组织。 datanucleus.jdo.JDOPersistenceManager.makePersistent(JDOPersistenceManager.java:694) – Link 2010-03-02 00:19:03

回答

1

Transactions的文档应该是有帮助这里,尤其是在实体组的部分。

实体组告诉App Engine的多个实体存储在数据存储中的同一个节点 - 否则,交易将需要吨跨节点通信,并几乎不可能得到正确的。

实体组主要用于亲子关系,让孩子实体可以作为家长是同一事务中更新。

+0

嗨ImJasonH,感谢您的答复。 我想存储每个记录1MB。在我上面的例子中,我要插入总共10MB(每个实体1MB)。 如果即将使用父母子女关系,则整个父母和子女实体仅限于1MB?没有办法插入10MB的数据? – Link 2010-03-02 01:15:13

+0

我不确定实体大小限制是由实体还是实体组来定义,而且文档也不是很清楚。为什么不试试看看它是否有效? – 2010-03-02 01:38:51

+0

我试过了,它的工作原理:)感谢您为我带来正确的道路。 – Link 2010-03-02 06:37:10