在探索我的新项目时,我遇到了一些遗留代码,其含义是将一些查询结果显式预取到 Hibernate 缓存中。
该代码解决的任务是根据某些属性值选择实体。
例如:
SELECT c
FROM MyEntity c
LEFT OUTER JOIN c.relatedEntity relatedEntity
WHERE c.field1 = :param1 AND relatedEntity.field1 = :param2 AND relatedEntity.field2 = :param3
建议的改进是在运行此查询之前预取所有实体,即在主要查询之前运行以下查询之一:
SELECT c, relatedEntity FROM MyEntity c LEFT OUTER JOIN c.relatedEntity relatedEntity
或者
SELECT FROM MyEntity;
SELECT FROM RelatedEntity;
您如何看待这种优化?能有用吗?如果“是”,在哪些情况下?