Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JPA:如何避免急取超时问题_Jpa_Fetch_Openjpa - Fatal编程技术网

JPA:如何避免急取超时问题

JPA:如何避免急取超时问题,jpa,fetch,openjpa,Jpa,Fetch,Openjpa,我在JPA面临着一种情况 我有一个实体,比如A。A与自身有父子关系。因此A可以有A(子)和A(父)的集合。如果父节点为null,则表示A是层次结构的根节点 我的用例是这样的,我需要获取表中的所有数据(可以是大约30k-40k行),然后根据实体之间的父子关系将其组织到树结构中 因此,我决定对集合字段使用EAGER fetching,这样JPA本身就可以在所需的树结构中获取数据,并且工作得非常好。 但在其他用例中,不需要获取一个数据库的全部数据,而且当数据太多时也会导致超时问题。 那么我如何解决这个

我在JPA面临着一种情况

我有一个实体,比如A。A与自身有父子关系。因此A可以有A(子)和A(父)的集合。如果父节点为null,则表示A是层次结构的根节点

我的用例是这样的,我需要获取表中的所有数据(可以是大约30k-40k行),然后根据实体之间的父子关系将其组织到树结构中

因此,我决定对集合字段使用EAGER fetching,这样JPA本身就可以在所需的树结构中获取数据,并且工作得非常好。 但在其他用例中,不需要获取一个数据库的全部数据,而且当数据太多时也会导致超时问题。 那么我如何解决这个问题呢

我计划将两个实体映射到表中,一个具有急切策略,另一个具有懒惰策略。所以我会在我的用例中使用渴望的一个,而其他用例会使用懒惰的一个。
这是干净的解决方案吗?

不,我不这么认为。我从来没有因为任何原因尝试将两个单独的实体附加到同一个表,这感觉像是一个有问题的想法。相反,我建议您考虑设置查询超时,这似乎是一个坏主意,因为您将获得许多您说不需要的数据,而且显然您的性能将很差


或者,也许是最好的解决方案,在不一定需要的地方停止急于获取,我想您在实体a中说过。因为a本质上是树结构中的一个节点,所以放置fetch=eager总是要获取整个树,正如您所说,它可能相当大。大到在某些情况下会引起问题。我建议删除急切获取,构建一些命名查询,并管理通过服务层获取的内容。这并不很难,过去对我来说效果很好。

我删除了急切的回访。现在,我正在运行时使用fetch模式激活EAGER fetch。到目前为止似乎效果不错。