【问题标题】:Objectify - does transaction throw ConcurrentModException in case of simultaneous creation of an entity?Objectify - 如果同时创建实体,事务是否会抛出 ConcurrentModException?
【发布时间】:2013-04-03 22:48:12
【问题描述】:

如果在两个不同的事务中同时(之前不存在)创建具有相同键(没有父级)的实体,Objectify 是否会抛出 ConcurrentModificationException?我刚刚找到了关于实体已经存在并被修改的情况的信息,但如果它还不存在的话……

            ofy().transactNew(20, new VoidWork() {

            @Override
            public void vrun() {
                Key<GameRequest> key = Key.create(GameRequest.class, numberOfPlayers + "_" + rules);
                Ref<GameRequest> ref = ofy().load().key(key);

                GameRequest gr = ref.get();
                if(gr == null) {

                    // create new gamerequest and add... 
                    // <-- HERE
                } else {
                    ...
                }


            }
        });

谢谢!

【问题讨论】:

    标签: java google-app-engine transactions objectify


    【解决方案1】:

    是的,如果该实体组中的任何内容发生变化(包括实体创建和删除),您将获得 CME。

    您显示的代码应该可以正常工作。除非您真的知道自己在做什么,否则最好只使用 transact() 方法,而不是尝试限制重试或强制执行新事务。 99% 的时间,transact() 只是做正确的事。

    【讨论】:

    • 即使我们没有指定父/实体组,因此无法确定该实体在数据存储中的“位置”创建?
    • 如果您没有指定父级(或有一个空父级),那么您的实体实体组的根。没有歧义。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-17
    • 2017-02-09
    • 2014-02-21
    • 1970-01-01
    • 2020-08-20
    • 2012-10-01
    相关资源
    最近更新 更多