我正在尝试更新我的所有 4000 个对象,ProfileEntity
但出现以下异常:
javax.persistence.QueryTimeoutException: The datastore operation timed out, or the data was temporarily unavailable.
这是我的代码:
public synchronized static void setX4all()
{
em = EMF.get().createEntityManager();
Query query = em.createQuery("SELECT p FROM ProfileEntity p");
List<ProfileEntity> usersList = query.getResultList();
int a,b,x;
for (ProfileEntity profileEntity : usersList)
{
a = profileEntity.getA();
b = profileEntity.getB();
x = func(a,b);
profileEntity.setX(x);
em.getTransaction().begin();
em.persist(profileEntity);
em.getTransaction().commit();
}
em.close();
}
我猜我需要很长时间才能从ProfileEntity
. 我该怎么做?
- 我正在使用 Google App Engine,因此无法进行 UPDATE 查询。
18/10 编辑
在这 2 天里,我尝试了:
按照 Thanos Makris 的建议使用后端,但走到了死胡同。你可以在这里看到我的问题。
阅读有关 Map-Reduce 的 DataNucleus 建议,但真的迷路了。
我正在寻找不同的方向。由于我只打算进行一次更新,也许我可以每 200 个左右的对象手动更新一次。
是否可以查询前 200 个对象,然后查询第二个 200 个对象,依此类推?