Frage

Ich habe folgende Bohnen Aufgabe, Serverdetails und ApplicationDetails. Ich wünsche alle Aufgaben, ihre Server-Details und Anwendungsdetails zu einem bestimmten Anwendungsnamen basierte abgerufen werden.

Aus dem Ergebnis erwarte ich die Daten in einer Art und Weise abrufen zu können, wie zum Beispiel: task.getServers (). getApplicationDetails ()

In Wirklichkeit erhalte ich, was scheint flach Daten Darstellung als Object [] zu sein.

Gibt es eine Möglichkeit zu tun, was ich vorschlagen?

Im Anschluss an meinem Code ...

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();
War es hilfreich?

Lösung

Sie sollten nur das Hauptobjekt abgerufen werden.

Für die anderen können Sie:

  1. , um sie zu navigieren, während die Session nicht geschlossen werden (läuft zusätzliche Abfragen wie faul benötigt, bekannt, das für einfache Bedienung ideal ist)
  2. abrufen sie in der ursprünglichen Abfrage des fetch Schlüsselwort.

Beispiel:

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

können Sie die Daten in einer Art und Weise abzurufen, wie zum Beispiel:
task.getServers().getApplicationDetails()

Andere Tipps

Sie können den Objektgraphen abrufen wie die anderen gesagt haben mit LEFT JOIN FECH. Ein crevent ich gefunden habe, wenn Objektgraphen Abrufen, wenn ein vieles-zu-eins-Beziehung zu Fuß nach unten Sie nicht zurück, ohne zusätzlichen Datenbankzugriff gehen können.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top