次のようなドメイン オブジェクトがあります。
@PersistenceCapable(detachable="true")
public class UserData implements java.io.Serializable
{
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Long id;
@Persistent
@NotNull
private String openId;
public UserData(String openId)
{
this.openId = openId;
}
}
次に、UserData オブジェクトを作成し、JDO を使用して永続化します。
UserData userData = ThreadLocalPMF.getPersistenceManager().makePersistent(new UserData(openId));
コードの少し後で、同じ PersistenceManager と同じスレッドを使用して、まだ開いている同じトランザクションでクエリを実行します。
Query query = ThreadLocalPMF.getPersistenceManager().newQuery(UserData.class, "openId == :openId");
query.setUnique(true);
UserData userData = (UserData)query.execute(openId);
ここで、以前に数行のコードで永続化されたオブジェクトの代わりに、クエリが null を返すことが一度発生しました。ここで何が問題なのですか?これは一貫性の問題ですか?アプリは高レプリケーション データストアを使用しています。
<property name="datanucleus.appengine.datastoreEnableXGTransactions" value="true"/>