Querydsl присоединиться к одной таблице несколько раз
допустим, у меня есть два стола Task
и Company
. Company
и колонки id
и name
. Task
имеет две колонки customerId
и providerId
которая ссылка обратно на на Company
.
использование Querydsl как мне присоединиться к Company
таблица дважды, чтобы я мог получить name
для каждой компании указан customerId
и providerId
?
код, который, возможно, лучше объясняет, что я пытаюсь:
Configuration configuration = new Configuration(templates);
JPASQLQuery query = new JPASQLQuery(this.entityManager, configuration);
QTask task = QTask.task;
QCompany customer = QCompany.company;
QCompany provider = QCompany.company;
JPASQLQuery sql = query.from(task).join(customer).on(customer.id.eq(task.customerId))
.join(provider).on(provider.id.eq(task.providerId));
return sql.list(task.id, customer.name.as("customerName"), provider.name.as("providerName"));
который генерирует В SQL:
select task.id, company.name as customerName, company.name as providerName from task join company on company.id = task.customerId
и мне бы очень хотелось, чтобы это было:
select task.id, customer.name as customerName, provider.name as providerName from task join company as customer on customer.id = task.customerId join company as provider on provider.id = task.providerId
я не мог понять, как псевдоним таблицы, к которой я присоединялся, чтобы я мог различать имена клиентов и поставщиков. Я пытался сделать new QCompany("company as provider")
но это не сработало. Кто-нибудь знает, как это сделать?
1 ответов
Если вам нужны переменные, просто сделайте следующее
QCompany customer = new QCompany("customer");
QCompany provider = new QCompany("provider");
переназначение переменной по умолчанию QCompany.company
не помогает