2015-02-04 23 views
5

İki tablo Task ve Company olduğunu varsayalım. Company, id ve name numaralı sütunlara sahiptir. Task, Company için customerId ve providerId iki sütununa ve id sütununa bağlanır.Aynı tabloda birden çok kez aynı Querydsl birleştirin

yüzden customerId ve providerId tarafından belirtilen her bir şirket için name nasıl alabilirim iki kez Company masaya katılabilirim Querydsl kullanarak? üretir

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 

Ve bunun olmasını çok isterdim:

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 

Kod belki, bu çalıştığım şey daha iyi açıklıyor Katıldığım masanın nasıl takılacağını anlayamadım, böylece müşteri ve sağlayıcı isimleri arasında ayrım yapabilirdim. new QCompany("company as provider") yapmayı denedim ama işe yaramadı. Bunu nasıl yapabileceğini bilen var mı?

cevap

13

sadece

+0

Teşekkür Timo'yu yardımcı olmuyor

QCompany customer = new QCompany("customer"); QCompany provider = new QCompany("provider"); 

Yeniden Atama varsayılan değişken QCompany.company aşağıdaki do değişkenlere gerek, ama bu bir tablo "müşteri" ve tablo ile bir sorgu oluşturursa "sağlayıcı". Bu tablolar mevcut değil. Bu sadece şirket adında bir masa. Eğer "müşteri olarak şirket" ve "iş sağlayıcı olarak şirket" yaparsa, bu harika çalışırdı. – Josh

+0

QCompany, bir APT tabanlı oluşturulan sınıfsa, sorgulamayacaksanız, bu durum için JPAQuery kullanmanız gerekir. JPASQLQuery, bu yaklaşım kullanılarak oluşturulan Q-tipleri ile SQL sorguları içindir. Http://www.querydsl.com/static/querydsl/3.6.1/reference/html/ch02s03.html#d0e668 –

+0

Bummer, bu berbat. Bu kasıtlı bir şey mi yoksa bilet açabileceğim bir şey mi? – Josh

İlgili konular