1
我嘗試使用objectify事務,但當我需要重新加載在同一事務中創建的對象時,我遇到了一些問題。GAE Objectify在同一事務內的事務中創建的加載對象
把這個示例代碼
@Entity
public class MyObject
{
@Parent
Key<ParentClass> parent;
@Index
String foo;
}
ofy().transact(new VoidWork()
{
@Override
public void vrun()
{
ParentClass parent = load();// load the parent
String fooValue = "bar";
Key<ParentClass> parentKey = Key.create(ParentClass.class, parent.getId())
MyObject myObject = new MyObject(parentKey);
myObject.setFoo(fooValue);
ofy().save().entity(myObject).now();
MyObject reloaded = ofy().load().type(MyObject.class).ancestor(parentKey).filter("foo", fooValue).first().now();
if(reloaded == null)
{
throw new RuntimeException("error");
}
}
});
我的目標重裝上陣總是空的,也許我錯過了什麼,但在邏輯上在一個事務中我可以查詢這是在同一個事務創建的對象?
謝謝
謝謝回答,我希望客觀化處理與事務上下文中本地緩存,但顯然客體不這樣做.. – Benjyyyyy
如果你做了一個get-通過鑰匙在交易,Objectify會給你保存的對象(來自會話緩存)。但是,查詢會提交給數據存儲的查詢處理器(無法滿足來自會話緩存的查詢),因此您會看到空結果集。 – stickfigure
這可以追溯到「將數據存儲視爲鍵值存儲,其中一些額外的索引行爲被閂上了」。查詢行爲有一些怪癖。 – stickfigure