Domanda

Ho i seguenti bean Task, ServerDetails e ApplicationDetails. Desidero recuperare tutte le attività, i dettagli del loro server e i dettagli dell'applicazione in base a un nome specifico dell'applicazione.

Dal risultato mi aspetto di essere in grado di recuperare i dati in un modo come: task.getServers (). getApplicationDetails ()

In realtà, ottengo quella che sembra essere la rappresentazione di dati flat come un oggetto [].

Esiste un modo per fare ciò che propongo?

Segue il mio codice ...

class Task {
    private String taskId;
    private Set<ServerDetails> servers;
}

class ServerDetails {
    private String id;
    private Set<ApplicationDetails> applications;
}

class ApplicationDetails {
   private String id;
}

HQL:

StringBuilder hql = new StringBuilder(256);
hql.append("FROM Task h, ServerDetails ser, ApplicationDetails app ");
hql.append("WHERE h.executionDate > "); 
hql.append("to_date('");
hql.append(DBDateFormatter.getInstance().formatDate(cal));
hql.append("',  '");
hql.append(DBDateFormatter.getInstance().getOracleDateFormat());
hql.append("') and h.id = ser.task.id and ser.id = app.server and app.name = 'XXX'");
hql.append(" order by h.executionDate desc");
String hql = hql.toString();

Query query = session.createQuery(hql);      
results = (List<Object[]>) query.list();
È stato utile?

Soluzione

Dovresti semplicemente recuperare l'oggetto principale.

Per l'altro, puoi:

  1. naviga verso di loro mentre Sessione non è stato chiuso (esegue query aggiuntive in base alle esigenze, noto come pigro; questo è l'ideale per facilità d'uso)
  2. recuperali nella query originale usando la parola chiave fetch .

Esempio:

    SELECT h 
    FROM Task h
    JOIN FETCH h.serveurs ser
    JOIN FETCH ser.applications app 
    WHERE h.executionDate > 
    .... // no need to specify the joins

Sarai in grado di recuperare i dati in un modo come:
task.getServers (). GetApplicationDetails ()

Altri suggerimenti

Puoi recuperare il grafico dell'oggetto come hanno già detto gli altri usando LEFT JOIN FECH. Un creento che ho trovato durante il recupero di grafici a oggetti, quando si cammina lungo una relazione molti-a-uno non è possibile risalire senza un ulteriore accesso al database.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top