是否可以强制 Hibernate 实现的 JPA 使用批量获取进行预加载?
您可能想知道我为什么要做这么奇怪的事情,所以让我解释一下。
我们有两个实体A和B. A从to有一个多对一的关系B。
我想通过A搜索加载实体,并且希望在它们从存储库返回之前完全加载它们。
但是由于 's 很多而A's 很少B,所有(相关的)B's 都将在二级缓存中。因此,我想避免B每次都从数据库中获取所有 's。
是否可以强制 Hibernate 实现的 JPA 使用批量获取进行预加载?
您可能想知道我为什么要做这么奇怪的事情,所以让我解释一下。
我们有两个实体A和B. A从to有一个多对一的关系B。
我想通过A搜索加载实体,并且希望在它们从存储库返回之前完全加载它们。
但是由于 's 很多而A's 很少B,所有(相关的)B's 都将在二级缓存中。因此,我想避免B每次都从数据库中获取所有 's。
据我了解您的问题,解决方案是在 NamedQuery 中使用带有FETCH指令的 NamedQuery:
SELECT DISTINCT B LEFT JOIN FETCH B.a A//will return fully loaded B instances
如果要指定 Batch Size,可以@BatchSize在 Hibernate(不是 JPA)中使用。检查此链接以获取示例。