我正面临着JPA的情况。
我有一个实体,说AA与自己有亲子关系。所以A可以有一个A(子)和一个A(父)的集合。如果父是null,则意味着A是该根的节点。层次结构。
我的用例是这样的,我需要获取表中的所有数据(可以是大约30k-40k行),然后根据实体之间的父子关系在树结构中组织它。
所以我决定让EAGER获取Collection字段,因此JPA本身可以获取所需树结构中的数据,并且它可以正常工作。 但在其他用例中,不需要获取A的整个数据,并且当数据太多时也会导致超时问题。 那么我该如何解决这个问题?
我计划将两个实体映射到表中,一个具有EAGER策略,而另一个具有LAZY策略。所以我会在我的用例中使用EAGER,其他用例会使用LAZY。 这会是一个干净的解决方案吗?
答案 0 :(得分:0)
不,我不这么认为。我从来没有尝试过将任何原因将两个独立的实体附加到同一个表中,并且感觉就像一个有问题的想法。相反,我建议你考虑设置查询超时,这似乎是一个坏主意,因为你会得到很多你说不需要的数据,显然你的表现会很糟糕。
或者,也许是最好的解决方案,停止渴望获取它并不总是一个要求,我想你在实体A中说过。因为A本质上是树结构中的节点,所以把Fetch = EAGER总是要去获取整个树,正如你所说,它可能非常大。大到足以在某些情况下引起问题。我建议删除EAGER fetch,构建一些命名查询,并管理通过服务层获取的内容。它不是很难,过去对我来说效果很好。