基本交易如下:
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);
}
}
答案 0 :(得分:2)
您描述的两个案例完全相同。
如果您希望在事务之外运行某些东西,那么Objectify提供了一个.transactionless()方法来“转义”事务上下文。