Pergunta

Eu tenho as seguintes feijão tarefas, ServerDetails e ApplicationDetails. Eu desejo para recuperar todas as tarefas, os detalhes do servidor e detalhes do aplicativo com base em um nome de aplicativo específico.

A partir do resultado eu espero ser capaz de recuperar os dados de forma tais como: task.getServers (). getApplicationDetails ()

Na realidade, eu tenho o que parece ser a representação dos dados planas como um Object [].

Existe alguma maneira de fazer o que propõe?

A seguir é o meu 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();
Foi útil?

Solução

Você deve apenas recuperar o objeto principal.

Por outro lado, você pode:

  1. navegar por elas enquanto o Session não ser fechado (executa consultas adicionais, conforme necessário, conhecido como preguiçoso, o que é ideal para a facilidade de uso)
  2. recuperá-los na consulta original utilizando palavras-chave fetch.

Exemplo:

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

Você será capaz de recuperar os dados de uma forma tais como:
task.getServers().getApplicationDetails()

Outras dicas

Você pode recuperar o gráfico do objeto como os outros disseram usar LEFT JOIN FECH. Um crevent tenho encontrado ao recuperar gráficos de objeto, quando andando por uma relação para-muitos-um que você não pode andar para trás sem acesso ao banco adicional.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top