Objectify - ofy()在事务外定义的方法中

时间:2014-06-25 23:25:42

标签: google-app-engine objectify google-cloud-datastore

基本交易如下:

import static com.googlecode.objectify.ObjectifyService.ofy;
import com.googlecode.objectify.Work;

// If you don't need to return a value, you can use VoidWork
Thing th = ofy().transact(new Work<Thing>() {
    public Thing run() {
        Thing thing = ofy().load().key(thingKey).now();
        thing.modify();
        ofy().save().entity(thing);
    }
});

当从事务中调用ofy()。load()和其他ofy()方法时,它们具有事务的所有好处,例如是原子的。 但是,使用包含ofy()方法的Util方法是否会转义事务?如下所示。

// If you don't need to return a value, you can use VoidWork
Thing th = ofy().transact(new Work<Thing>() {
    public Thing run() {
        Util.modify(thingKey);
    }
});

在这样的地方定义了Util。

public class Util {

    public static modify(thingKey) {
        Thing thing = ofy().load().key(thingKey).now();
        thing.modify();
        ofy().save().entity(thing);
    }

}

1 个答案:

答案 0 :(得分:2)

您描述的两个案例完全相同。

如果您希望在事务之外运行某些东西,那么Objectify提供了一个.transactionless()方法来“转义”事务上下文。