boolean r = ofy().transact(new Work<Boolean>() {
@Override
public Boolean run() {
Visit visit = ofy().load().type(Visit.class)
.filter(Visit.USER_ID, userID)
.filter(Visit.VENUE_ID, venueID).first().get();
if (visit == null)
return false;
visit.setLastRequestDate(new Date(timestamp));
ofy().save().entity(visit).now();
return true;
}
});
and I get
java.lang.IllegalArgumentException: Only ancestor queries are allowed inside transactions.
for the line with the get()
call.
why? I'm only querying Visit
entity in this transaction.
I'm doing this in a transaction, because I want all this to be performed as atom operation.
The error seems quite clear: inside a transaction, you're only allowed to perform ancestor queries. Your query is not an ancestor query.
No way to do ancestor-less query inside a transaction. Either you do it without transactions or replace query with get.
The closest that you can do is: