2010-03-01 47 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