gpt4 book ai didi

java - 使用 JPA 在 GAE 中保存许多实体

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:19:20 25 4
gpt4 key购买 nike

我将 JPA 与 Google App Engine 结合使用。假设我有一个非常简单的@Entity,由一个键和一个字符串组成,仅此而已。我现在创建了 10000 个这样的实体,将它们放在一个列表中,现在想存储所有这些实体。

如果我尝试使用 EntityManager em 和 for 循环遍历所有实体的 List...

for(MyEntity entity : listOfAllEntities) {
em.persist(entity);
}

.. 我会得到一个 IllegalArgumentException:

java.lang.IllegalArgumentException: can't operate on multiple entity groups in a single transaction.

据我所知,我需要为每个 persist() 调用关闭并重新打开 EntityManager。当然,这是非常耗时的。我正在尝试每天运行一次任务以重新加载所有实体。根据 GAE 策略,该任务有 30 秒的超时时间。

因此,另一种方法是一次只保存 500 个实体并多次运行该任务,我认为这比实际情况更复杂。

这是实现我想要做的事情的唯一方法还是我在这里遗漏了什么?

解决方案:所有答案都指向同一个方向。我只是通过创建一个“虚拟父”实体来创建一对多关系。在我的情况下,我真的不需要 parent ,可以这么说,这在现实世界中没有多大意义。但是在将这个虚拟实体设置为每个子实体的父实体之后,我可以像以前一样保存它们而不必太在意事务。感谢大家。

最佳答案

也许这过于简单化了,但您可以只添加 X 个实体作为父实体的子实体,这会导致它们位于同一实体组中。这将允许您将它们全部保存在一个事务中。基本上,在父实体和您要保留的对象的子实体之间创建一个拥有的一对多关系。

关于java - 使用 JPA 在 GAE 中保存许多实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4250808/

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