bloggers bloggers

Marco Napolitano
Messaggi: 79
Stelle: 0
Data: 17/02/22
Jader Jed Francia
Messaggi: 63
Stelle: 0
Data: 18/02/21
Paolo Gambetti
Messaggi: 2
Stelle: 0
Data: 11/11/19
Katia Pazzi
Messaggi: 1
Stelle: 0
Data: 27/06/19
Ezio Lombardi
Messaggi: 11
Stelle: 0
Data: 10/04/18
Chiara Mambretti
Messaggi: 25
Stelle: 0
Data: 27/02/17
Serena Traversi
Messaggi: 3
Stelle: 0
Data: 21/07/16
Francesco Falanga
Messaggi: 8
Stelle: 0
Data: 14/06/16
Antonio Musarra
Messaggi: 2
Stelle: 0
Data: 18/11/13
Simone Celli Marchi
Messaggi: 6
Stelle: 0
Data: 09/07/13
Indietro

Query custom su LR con nomi di colonne duplicati

Attenzione! Il post non è proprio su Liferay DXP ma riguarda più Hibernate! Però, siccome è un tema che si potrebbe affrontare anche negli sviluppi su Liferay lo censisco qui, sperando che possa tornare utile a qualcuno! ;)

Come ha già spiegato Napo in un post di qualche tempo fa, è possibile (ovviamente) creare custom query su Liferay 7 usando i c.d. Finder.

Oggi però, mentre come al solito ero intento nel non far nulla :), un collega di una Università per la quale abbiamo realizzato un portale mi ha contattato chiedendomi una cosa!

Qui lo stack della chat Telegram dove mi è arrivata la richiesta:

Sandro Zacchino, [31.07.18 13:22]
Ciao Jader, ti faccio una domanda da niubbo

Sandro Zacchino, [31.07.18 13:23]
ho realizzato una custom query in una classe Finder
query.append("SELECT a.*, ea.* ")
                .append(" FROM " + DB_PREFIX + "Azienda a ")
                .append(" INNER JOIN " + DB_PREFIX + "Evento_Azienda ea ON ")
                .append(" ea.aziendaId = a.aziendaId ")
                .append(" AND ea.companyId = a.companyId ")
                .append(" AND ea.groupId = a.groupId ")
                .append(" WHERE 1=1 ")
                .append(" AND ea.eventoId = " + String.valueOf(eventoId))

Sandro Zacchino, [31.07.18 13:24]
di seguito aggiungo ad a il suo modelImpl ad ea il suo...tutto funziona e visualizzo i risultati eccetto che per un particolare

Jader Francia, [31.07.18 13:25]
<suspance>

Sandro Zacchino, [31.07.18 13:25]
sia a che ea hanno un campo email il cui contenuto però è diverso. Succede però che ea.getEmail() (l'ho scritto in modo breve giusto per capirci) mi restituisca la mail di a

Occavolo!

Questa è nuova! Ho pensato. Non incollo lo stack di baggianate che gli ho detto di provare :) ma alla fine Sandro ha risolto da solo, elegantemente, il problema!

Leggendo la documentazione di Hibernate, Sandro ha trovato nel paragrafo "16.1.4. Returning multiple entities" la soluzione al problema!

Basta mettere tra {} gli alias della query e tutto funzionerà!

Cito dalla documentazione di Hibernate:

The following form is not vulnerable to column name duplication:

sess.createSQLQuery("SELECT {cat.*}, {mother.*}  FROM CATS c, CATS m WHERE c.MOTHER_ID = c.ID")
 .addEntity("cat", Cat.class)
 .addEntity("mother", Cat.class)

Grazie mille a Sandro (vero ghost writer di questo post ;)) per aver condiviso la soluzione e avermi permesso di fare un post in più per scalare la classifica e cercare di raggiungere Napo!! :)

A presto e buon divertimento con le query custom, i nomi di colonna duplicati, hibernate e Liferay DXP! :)

Commenti
Nessun commento. Vuoi essere il primo.