2

我可以做这样的事情吗?即使我没有使用ds.get(tx, key)and ,它仍然是交易ds.put(tx, key)吗?

public class MyClass {

    private final DatastoreService ds;

    @Inject
    public MyClass(DatastoreService ds) {
        this.ds = ds;
    }

    @Transactional
    public void plusOne() {
        Key someKey;
        Entity thing = ds.get(someKey);
        int newValue = thing.getProperty("prop") + 1;
        thing.setProperty("prop", newValue);
        ds.put(thing);
    }
}
4

1 回答 1

0

我不习惯 Guice,但像任何其他依赖注入框架一样,我猜你必须在模块配置中声明某种 TransactionManager ?在这种情况下,它不存在,或者至少没有被 Google 宣传。也许你会在社区中找到你需要的东西,看看 GitHub……但我再次高度怀疑 Guice 是否支持开箱即用的低级数据存储。不过,您可能在 Guice 中有一些 JPA 支持?

或者您可以开发自己的事务管理器...我已经使用 Spring 开发了自己的 @DatastoreTransactional 注释,但不幸的是在生产运行时使用 Spring AOP 失败,请参阅: 在 App Engine 上使用 Spring AOP 导致 StackOverflowError

于 2014-03-18T10:00:32.430 回答