Имеются две таблицы (сценарии для SQL Сервера) с отношением один ко многим:
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 для этого метода поиска создается 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 создать SQL без объединения без явного определения запроса через @Query
?