我有看起来像这样的域对象:
@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 而不是之前在几行代码中持久化的对象。这里有什么问题?这是一个一致性问题吗?该应用程序正在使用 High Replication Datastore
<property name="datanucleus.appengine.datastoreEnableXGTransactions" value="true"/>