关于Spring Data jpa(+ Hibernate)" findOne"生成的SQL查询

时间:2018-03-19 11:34:19

标签: hibernate spring-data-jpa

我有一个与多个代码/标签实体相关联的主jpa实体。

当我使用findOne(mainEntityId)时,我可以看到Hibernate正在创建一个带有多个"左连接"的SQL查询,这就是我手工完成的。

但是,当我使用findByName(name)(" name"作为主要实体的辅助唯一键)时,Hibernate将发出一个查询,每个代码/标签实体没有连接+一个查询。我想这可能是一个更好的策略,如果你有很多"主要实体",但在我的情况下,我只有一个结果,我想调整映射或存储库,所以我得到"左连接& #34;我的单个结果" findByName"查询。

有没有办法做到这一点,怎么做?

1 个答案:

答案 0 :(得分:2)

您可以使用@EntityGraph注释或使用fetch join明确定义查询来实现此目的:

@EntityGraph(attributePaths = "children")
Parent findByName(String name);

@Query("select p from Parent p join fetch p.children")
Parent findByName(String name);