gpt4 book ai didi

java - 更新 JPA 实体中的所有对象

转载 作者:行者123 更新时间:2023-11-29 03:41:31 25 4
gpt4 key购买 nike

我正在尝试更新 ProfileEntity 中的所有 4000 个对象,但出现以下异常:

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 的建议使用后端,但走到了死胡同。可以看我的问题here .
阅读 DataNucleus 关于 Map-Reduce 的建议,但真的迷路了。

我正在寻找不同的方向。因为我只打算做一次这个更新,也许我可以每 200 个对象左右手动更新一次。
是否可以查询前 200 个对象,然后是第二个 200 个对象等等?

最佳答案

鉴于您的情况,我建议运行 native 更新查询:

 Query query = em.createNativeQuery("update ProfileEntity pe set pe.X = 'x'");
query.executeUpdate();

请注意:这里的查询字符串是 SQLupdate **table_name** set ....

这样效果会更好。

关于java - 更新 JPA 实体中的所有对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12896162/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com