Ruhezustand, wie eine Hierarchie-Objekt abzurufen
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();
Lösung
Sie sollten nur das Hauptobjekt abgerufen werden.
Für die anderen können Sie:
- , 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) - 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.