Предположим, у меня есть эта таблица service_providers, у которой есть собственная ссылка через столбец enterprise_id.Внутреннее соединение querydsl с предложением where
id enterprise_id
102 57
103 57
public class ServiceProvider {
....
@ManyToOne
@JoinColumn(name = "enterprise_id")
private ServiceProvider enterprise;
}
Что я пытаюсь сделать с помощью enterprise_id получить все servive_providers. Это довольно легко в SQL:
select sp1.id
from service_providers sp1
inner join service_providers sp2 on (sp1.enterprise_id=sp2.id)
where sp2.id=57;
Но при попытке повторить, что с помощью запроса-DSL я как-то попасть в проблемы.
Вот что выглядит следующим образом:
QServiceProvider serviceProvider2 = new QServiceProvider("serviceProvider2");
QServiceProvider serviceProvider3 = new QServiceProvider("serviceProvider3");
query.from(serviceProvider2)
.innerJoin(serviceProvider3)
.on(serviceProvider2.enterprise.id.eq(serviceProvider3.id))
.where(serviceProvider3.id.eq(enterpriseId))
.list(serviceProvider2.id);
Это то, что спящий режим генерирует:
select sp1.id
from service_providers sp0
cross join service_providers sp1
inner join service_providers sp2 on (sp1.enterprise_id=sp2.id)
where sp0.id=? and sp2.id=?
Это немного сбивает с толку, кроме того, что неправильно.
Может ли кто-нибудь сказать мне, что я делаю неправильно здесь?
что ** ** может быть недействительна, если enterprise_id где-то я мог бы получить доступ, thatsa JoinColumn, как вы можете видеть. – Eugene