【问题标题】:JPA Query optimization by avoiding JOIN to lookup table?通过避免加入查找表来优化 JPA 查询?
【发布时间】:2011-04-09 09:02:16
【问题描述】:

想象一张桌子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 查询,返回支持部门的所有员工。假设我知道支持部门的 PrimaryKey (SUPT)

我猜应该是:

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

问题:

由于emp表中提供了部门键SUPT代码,有没有办法重写JPA查询避免到部门实体的 JOIN?

这会提高性能吗?或者 JPA 实现(如 Hibernate)是否足够聪明,可以避免数据库连接到 dept 表?

【问题讨论】:

    标签: java hibernate jpa jakarta-ee jpql


    【解决方案1】:

    您通常会将查询编写为

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

    并让您的提供商找出得出结果的最佳方法。在hibernate的情况下,是的,它很聪明地意识到它可以只看join列。

    编辑:值得注意的是,您还没有在注释中设置延迟加载,所以无论如何它都会加入表格以创建部门实体:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-05
      • 2012-05-18
      • 2015-04-26
      相关资源
      最近更新 更多