【发布时间】:2020-01-09 07:10:37
【问题描述】:
给定两个具有一对多关系的表(SQL Server 脚本):
CREATE TABLE address (
id BIGINT IDENTITY (1, 1) NOT NULL,
street VARCHAR(255),
zip VARCHAR(32),
city VARCHAR(255),
country VARCHAR(32),
CONSTRAINT PK_address PRIMARY KEY NONCLUSTERED(id)
);
CREATE TABLE person (
id BIGINT IDENTITY (1, 1) NOT NULL,
address_id BIGINT NOT NULL,
first_name VARCHAR(32),
last_name VARCHAR(32),
CONSTRAINT PK_person PRIMARY KEY NONCLUSTERED(id),
CONSTRAINT FK_person_address FOREIGN KEY (address_id) REFERENCES address
);
一个人只有一个地址,但同一个地址可以链接到多个不同的人。
还有一个带有一个显式查询的 Spring JPA 存储库:
@Repository
public interface PersonJpaRepository extends JpaRepository<Person, Long> {
List<Person> findByAddressId(Long addressId);
}
使用 Hibernate 作为 JPA 提供程序,会为此 find 方法生成与此类似的 SQL:
select person0_.id, person0_.first_name, person0_.last_name
from person person0_
left outer join address address1_ on person0_.address_id=address1_.id
where person0_.address_id=?
由于我对 address 表中的任何数据都不感兴趣,而且我知道 address_id 已经准备就绪,因此似乎不需要加入:
select person0_.id, person0_.first_name, person0_.last_name
from person person0_
where person0_.address_id=?
这个查询给出了相同的结果。
我是否可以让 JPA/Hibernate 在不通过 @Query 显式定义查询的情况下生成没有连接的 SQL?
【问题讨论】:
标签: java sql-server spring hibernate jpa