У меня есть два класса сущностей:
class One {
Long id;
<Other properties>
@ManyToOne
Two two;
}
class Two {
Long id;
<Other properties>
}
Теперь, в OneRepository
, у меня есть метод:
One findByIdAndTwoId(Long oneId, Long twoId);
Когда этот метод вызывается, запрос отправляется в база данных:
select
<properties>
from
one one0_
left outer join
two two1_
on one0_.two_id=two1_.id
where
and one0_.id=?
and two1_.id=?
В то время как я ожидаю, что это будет иметь форму:
select
<properties>
from
one one0_
where
and one0_.id=?
and one0_.two_id=?
Есть ли способ сделать это? Пожалуйста, помогите.
EDIT:
Если я использую запрос критериев, как указано ниже, в результирующем запросе нет предложения соединения.
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<One> cq = cb.createQuery(One.class);
Root<One> oneRoot = cq.from(One.class);
cq.select(oneRoot).where(
cb.equal(oneRoot.get("id"), oneId),
cb.equal(oneRoot.get("two").get("id"), twoId)
);
TypedQuery<One> query = entityManager.createQuery(cq);
return query.getSingleResult();