繁体   English   中英

通过避免JOIN查找表来进行JPA查询优化?

[英]JPA Query optimization by avoiding JOIN to lookup table?

想象一下表emp

CREATE TABLE emp
( id           NUMBER
, name         VARCHAR
, dept_code    VARCHAR
)

和一个表部门

CREATE TABLE dept
( code         VARCHAR
, name         VARCHAR
)

emp.dept_code引用dept.code作为一个ForeignKey。

这些表映射到JPA实体,ForeignKey被建模为关联:

@ManyToOne
@JoinColumn(name = "dept_code")
private Department department;

鉴于以下数据:

emp                     dept    
----------------        ------------------
1    John   SALS        SALS     Sales
2    Louis  SALS        SUPT     Support
3    Jack   SUPT 
4    Lucy   SUPT  

我想编写一个JPA查询,返回支持部门中的所有Emloyees。 假设我知道支持部门( SUPT )的PrimaryKey

我猜那会是:

SELECT emp
  FROM Employee emp JOIN emp.department dept
 WHERE dept.code = 'SUPT'

题:

由于部门密钥SUPT代码在emp表中可用,有没有办法通过避免 JOIN到部门实体来重写JPA查询?

这会导致性能提升吗? 或者是一个JPA实现(如Hibernate)足够聪明,以避免数据库加入dept表?

您通常会将查询编写为

select emp
from employee emp
where emp.department.code = 'SUPT'

并让您的提供商找出提出结果的最佳方法。 在休眠的情况下,是的,它足够聪明,可以实现它只能查看连接列。

编辑:值得注意的是,你没有在注释中设置延迟加载,所以它会加入表格来创建部门实体:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM