【发布时间】:2021-12-31 16:20:13
【问题描述】:
以一个常见的业务情况为例,您有一个orders 表,其中有一个created_date 和一个customer_id。您想与相关客户一起阅读本月的所有订单:
@Query("select Q from Order Q join customer C on Q.customer_id=C.id where Q.created_date >= '2021-11-01'")
这可行,但是当我添加到application.properties:
logging.level.org.hibernate.SQL=DEBUG
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE
我惊恐地发现,对于每个订单,都会使用单独的 select 声明重新读取客户详细信息;因此,如果本月有 80 个订单,JPA 系统会执行 81 个select 语句,而不是一个。我明白这在一般情况下可能很难优化,但它使系统对生产毫无用处。是否可以提示 JPA/Spring 以避免额外的 select 语句?
【问题讨论】:
标签: sql jpa join spring-data-jpa jpql