私のサーブレットは次のことを実行する必要があります。ユーザーが会場に登録するときに、現在どこかに登録されているかどうかを確認します(同じ会場であっても)。登録されている場合は、登録を解除してもう一度登録します。
私は次のコードを持っていますが、問題を示すために簡略化しています:
Date tempDate = new Date();
Visit v = ofy().load().type(Visit.class)
.filter(Visit.USER_ID, 5L)
.filter(Visit.EXIT_DATE, null).first().get();
if(v != null)
exitVenue(5L, 7L, tempDate);
Visit visit = new Visit(5L, 7L, tempDate);
ofy().save().entity(visit).now();
Date tempDate2 = new Date();
Visit v2 = ofy().load().type(Visit.class)
.filter(Visit.USER_ID, 5L)
.filter(Visit.EXIT_DATE, null).first().get();
if(v2 != null)
exitVenue(5L, 7L, tempDate2);
Visit visit2 = new Visit(5L, 7L, tempDate2);
ofy().save().entity(visit2).now();
}
public void exitVenue(Long userID, Long venueID, Date exitDate) {
Visit visit = ofy().load().type(Visit.class)
.filter(Visit.USER_ID, userID)
.filter(Visit.VENUE_ID, venueID)
.filter(Visit.EXIT_DATE, null).first().get();
if(visit == null){
log.info("ERROR : User " + userID + " exited venue " + venueID + ", but Visit was not found");
return;
}
visit.setExitDate(exitDate);
ofy().save().entity(visit).now();
}
問題は、このすべての操作を2回実行したときに、データストアに既にアクセスがあることが常に検出されるとは限らないことです(2回ごとのテストなど)。そして、私は混乱しています。「now()」はすぐにそれを保存し、それから実行を継続することを想定していませんか?
ダン、助けてくれてありがとう