Pregunta

Tengo los siguientes beans Task, ServerDetails y ApplicationDetails. Deseo recuperar todas las tareas, sus detalles del servidor y los detalles de la aplicación en función de un nombre de aplicación específico.

Del resultado espero poder recuperar los datos de una manera tal que: task.getServers (). getApplicationDetails ()

En realidad, obtengo lo que parece ser la representación de datos planos como un Objeto [].

¿Hay alguna forma de hacer lo que propongo?

Siguiente es mi código ...

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();
¿Fue útil?

Solución

Deberías recuperar el objeto principal.

Para el otro, puedes:

  1. navegue hacia ellos mientras la Sesión no se haya cerrado (ejecuta consultas adicionales según sea necesario, lo que se conoce como perezoso; esto es ideal para facilitar su uso)
  2. recuperarlos en la consulta original utilizando la palabra clave fetch .

Ejemplo:

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

Podrá recuperar los datos de una manera como:
task.getServers().getApplicationDetails()

Otros consejos

Puede recuperar el gráfico del objeto como los otros han dicho usando LEFT JOIN FECH. Una credencia que he encontrado al recuperar gráficos de objetos, al caminar por una relación de muchos a uno, no se puede caminar sin acceso adicional a la base de datos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top