Ich versuche, objectify Transaktion zu verwenden, aber ich habe einige Probleme, wenn ich ein Objekt neu laden muss in der gleichen Transaktion erstellt.GAE Objectify Ladeobjekt in Transaktion innerhalb derselben Transaktion erstellt
Nehmen Sie diesen Beispielcode
@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");
}
}
});
Mein Objekt neu geladen immer null ist, vielleicht habe ich etwas vermissen, aber logisch innerhalb einer Transaktion kann ich ein Objekt abzufragen, die in der gleichen Transaktion erstellt wurde?
Dank
Dank für die Beantwortung, ich hoffe, dass objektiviert Griff, dass mit lokalen Cache im Transaktionskontext, aber offensichtlich objektivieren tut dies nicht .. – Benjyyyyy
Wenn Sie ein get-by-Taste in der Transaktion haben , Objectify gibt Ihnen das Objekt, das Sie gespeichert haben (aus dem Sitzungscache). Abfragen werden jedoch an den Abfrageprozessor des Datenspeichers gesendet (es gibt keine Möglichkeit, eine Abfrage aus dem Sitzungscache zu erfüllen), und somit wird die Nullergebnismenge angezeigt. – stickfigure
Dies geht zurück auf "denke an den Datenspeicher als einen Schlüssel-Wert-Speicher mit einigen zusätzlichen Indexierungsverhalten angeschraubt". Das Abfrageverhalten weist einige Besonderheiten auf. – stickfigure