gpt4 book ai didi

java - 通过避免加入查找表来优化 JPA 查询?

转载 作者:搜寻专家 更新时间:2023-10-31 20:24:01 24 4
gpt4 key购买 nike

想象一个表 emp:

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

和一张表部门:

CREATE TABLE dept
( code VARCHAR
, name VARCHAR
)

emp.dept_codedept.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 查询,返回支持部门的所有员工。假设我知道支持部门的主键(SUPT)

我猜会是:

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

问题:

由于部门键 SUPT 代码在 emp 表中可用,是否有方法通过避免 加入部门实体?

这会带来性能提升吗?或者 JPA 实现(如 Hibernate)是否足够智能以避免数据库连接到 dept 表?

最佳答案

你通常会把查询写成

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

并让您的提供者找出得出结果的最佳方法。在 hibernate 的情况下,是的,它足够聪明地意识到它可以只查看连接列。

edit : 值得注意的是,你没有在你的注解中设置延迟加载,所以无论如何它都会加入表来创建部门实体:)

关于java - 通过避免加入查找表来优化 JPA 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3661829/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com