2012-12-28 13 views
11

Ho la seguente query in jOOQ:Come selezionare da una sola tabella in jOOQ utilizzando una query con un join?

factory() 
.select() 
.from(PERSON) 
.join(ENDUSER).on(ENDUSER.PERSON_FK.equal(PERSON.ID)) 
.where(ENDUSER.ID.equal(userId)) 
.fetchOne(); 

Questa query restituisce a me un record con tutte le colonne da persona e ENDUSER, ma voglio solo le colonne da persona (è per questo che ho messo .from(PERSON) e non .from(PERSON, ENDUSER)) . So che non importa molto ma non voglio che vengano restituiti campi non necessari.

+0

Sono un po 'indeciso se questo è un duplicato di http : //stackoverflow.com/q/5832803/521799, in realtà –

risposta

14

è possibile accedere ai campi PERSON attraverso il metodo Table.fields():

factory() 
.select(PERSON.fields()) // Or getFields() in jOOQ 2.x 
.from(PERSON) 
.join(ENDUSER)... 

Questo è più o meno come la scrittura

SELECT PERSON.* 
FROM PERSON 
JOIN ENDUSER ... 

Un'altra opzione è quella di elencare in realtà tutti i campi dalla persona da risposta uno

+0

Grazie Lukas, è esattamente quello che stavo cercando! – islon

7

Lukas di era esattamente quello che stavo cercando. È inoltre possibile utilizzare il metodo into() per ottenere un oggetto di risposta fortemente tipizzato di nuovo solo per il tavolo che ti interessano (al posto del Record tipo generico):

PersonRecord record = factory() 
    .select() 
    .from(PERSON) 
    .join(ENDUSER).on(ENDUSER.PERSON_FK.equal(PERSON.ID)) 
    .where(ENDUSER.ID.equal(userId)) 
    .fetchOne() 
    .into(PERSON); 
Problemi correlati