Hi, kartik.
It works, but how can I rollback the 'first transaction' if the following
operations throws an exception?

2010/12/16 kartik kudada <[email protected]>

> You can not operate on two entities in single transaction unless both are
> entity groups.
> First delete CityNum  in one transaction and then delete ScheduleProcess
>  in different transaction,
>
>
>
>
>
>
>
>
> 2010/12/16 EtuO <[email protected]>
>
>> Caused by: java.lang.IllegalArgumentException: can't operate on
>>
>> multiple entity groups in a single transaction. found both Element {
>>  type: "CityNum"
>>  name: "013001"
>> }
>>  and Element {
>>  type: "ScheduleProcess"
>>  name: "013001"
>> }
>>
>>        at
>>
>> com.google.appengine.api.datastore.DatastoreApiHelper.translateError(DatastoreApiHelper.java:
>> 36)
>>        at com.google.appengine.api.datastore.DatastoreApiHelper
>> $1.convertException(DatastoreApiHelper.java:98)
>>        at
>> com.google.appengine.api.utils.FutureWrapper.get(FutureWrapper.java:
>> 69)
>>        at com.google.appengine.api.datastore.FutureHelper
>> $CumulativeAggregateFuture.get(FutureHelper.java:136)
>>        at com.google.appengine.api.datastore.FutureHelper
>> $TxnAwareFuture.get(FutureHelper.java:213)
>>        at
>> com.google.appengine.api.utils.FutureWrapper.get(FutureWrapper.java:
>> 67)
>>        at
>>
>> com.google.appengine.api.datastore.FutureHelper.getInternal(FutureHelper.java:
>> 71)
>>        at
>>
>> com.google.appengine.api.datastore.FutureHelper.quietGet(FutureHelper.java:
>> 58)
>>        at
>>
>> com.google.appengine.api.datastore.DatastoreServiceImpl.get(DatastoreServiceImpl.java:
>> 55)
>>        at
>>
>> org.datanucleus.store.appengine.RuntimeExceptionWrappingDatastoreService.get(RuntimeExceptionWrappingDatastoreService.java:
>> 64)
>>        ... 86 more
>>
>> 实现类代码:
>> /**
>>     * @see
>>
>> org.ertuo.taoplugin.facade.TransactionOperation#nestTrans(java.lang.Object[])
>>     */
>>    public void nestTrans(Object... objects) {
>>        String id = (String) objects[0];
>>        CityNum cn = cityNumDao.get(id);
>>        ScheduleProcess sp = scheduleDao.get(id);
>>        cityNumDao.delete(cn);
>>        scheduleDao.delete(sp);
>>        logger.info("id[" + id + "]对应的城市和任务删除完毕");
>>    }
>>
>> 接口代码:
>> /**
>>  * 事务性操作接口
>>  * @author mo.duanm
>>  * @version $Id: TransactionOperation.java, v 0.1 2010-12-16 下午
>> 05:22:23 mo.duanm Exp $
>>  */
>> public interface TransactionOperation {
>>
>>    /**
>>     * 嵌套事务
>>     * @param objects
>>     */
>>    @Transactional
>>    public void nestTrans(Object... objects);
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "Google App Engine for Java" group.
>> To post to this group, send email to
>> [email protected].
>> To unsubscribe from this group, send email to
>> [email protected]<google-appengine-java%[email protected]>
>> .
>> For more options, visit this group at
>> http://groups.google.com/group/google-appengine-java?hl=en.
>>
>>
>  --
> You received this message because you are subscribed to the Google Groups
> "Google App Engine for Java" group.
> To post to this group, send email to
> [email protected].
> To unsubscribe from this group, send email to
> [email protected]<google-appengine-java%[email protected]>
> .
> For more options, visit this group at
> http://groups.google.com/group/google-appengine-java?hl=en.
>



-- 
My Blog: http://blog.csdn.net/DL88250
--------------------------------------------------------
Open Source, Open Mind, Open Sight, Open Future!

-- 
You received this message because you are subscribed to the Google Groups 
"Google App Engine for Java" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/google-appengine-java?hl=en.

Reply via email to