Question

J'ai les beans suivants Task, ServerDetails et ApplicationDetails. Je souhaite récupérer toutes les tâches, les détails de leur serveur et ceux de l'application en fonction d'un nom d'application spécifique.

D'après les résultats, je pense pouvoir récupérer les données de la manière suivante: task.getServers (). getApplicationDetails ()

En réalité, j'obtiens ce qui semble être une représentation de données à plat sous forme d'objet [].

Existe-t-il un moyen de faire ce que je propose?

Ce qui suit est mon 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();
Était-ce utile?

La solution

Vous devriez simplement récupérer l'objet principal.

Pour l’autre, vous pouvez:

  1. accédez-y tant que la Session n'a pas été fermée (exécute des requêtes supplémentaires en fonction des besoins, également appelée paresseux; idéal pour la facilité d'utilisation)
  2. récupérez-les dans la requête d'origine à l'aide du mot clé fetch .

Exemple:

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

Vous pourrez récupérer les données de la manière suivante:
task.getServers (). getApplicationDetails ()

Autres conseils

Vous pouvez récupérer le graphe d'objet comme d'autres l'ont dit à l'aide de LEFT JOIN FECH. Un invent que j'ai trouvé lors de la récupération de graphiques d'objet, lorsque vous vous promenez dans une relation plusieurs-à-un, vous ne pouvez pas revenir en arrière sans accès supplémentaire à la base de données.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top