2010-09-07 148 views
5

想象一个表EMPJPA通过避免JOIN查询表来优化查询?

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查询,返回所有在支持部门的员工。假设我知道技术支持部门的的PrimaryKey(SUPT

我想这将是:

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

问:

由于部门关键SUPT代码可在emp表,有没有一种方法来重写JPA查询避免加入到部门实体?

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

回答

3

你通常会写查询作为

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

,让你的供应商找出最佳办法拿出结果。在休眠的情况下,是的,它足够聪明,意识到它可以查看连接列。

编辑:值得注意的是,您尚未在您的注释中设置延迟加载,因此它会加入表格以创建部门实体:)