2010-04-01 153 views
1
  1. 在本例中,是否有任何表元素正在被另一个客户端更改,或者只有当我们更改的元素已被另一个客户端更改时,才抛出异常?
  2. 只是为了验证 - 从commit()抛出的异常不是吗?GAE事务异常

    PersistenceManager pm = PMF.get().getPersistenceManager();  
    try { 
        pm.currentTransaction().begin(); 
        List<Row> Table = (List<Row>) pm.newQuery(query).execute(); 
        Table.get(0).setReserved(true); // <----- we change only this element 
        pm.currentTransaction().commit(); 
    } catch (JDOCanRetryException ex) { 
        pm.currentTransaction().rollback() // <----- if Table.get(1) was changed by another client do we get to this point??? 
    } 
    

回答

1

1)例外,将只被抛出如果该实体是在交易过程中的其他地方进行修改。

2.)正确的,当你提交时会抛出异常。

您还必须致电pm.makePersistent(Table.get(0))让它保存您的更改。

+0

很酷谢谢杰森! – bach 2010-04-02 01:31:16