спящий режим, как получить объект иерархии

StackOverflow https://stackoverflow.com/questions/1636796

  •  06-07-2019
  •  | 
  •  

Вопрос

У меня есть следующие bean-компоненты Task, ServerDetails и ApplicationDetails.Я хочу получить все задачи, сведения об их серверах и сведения о приложении на основе определенного имени приложения.

В результате я ожидаю, что смогу получить данные таким образом:Task.getServers().getApplicationDetails()

На самом деле я получаю то, что кажется плоским представлением данных в виде Object[].

Есть ли способ сделать то, что я предлагаю?

Ниже приведен мой код...

class Task {
    private String taskId;
    private Set<ServerDetails> servers;
}

class ServerDetails {
    private String id;
    private Set<ApplicationDetails> applications;
}

class ApplicationDetails {
   private String id;
}

ХКЛ:

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();
Это было полезно?

Решение

Вам нужно просто получить основной объект.

Для другого вы можете:

  1. перейдите к ним, пока Session не был закрыт (при необходимости выполняются дополнительные запросы, известные как lazy ;это идеально для простоты использования)
  2. получить их в исходном запросе, используя fetch ключевое слово.

Пример:

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

Вы сможете получить данные такими способами, как:
task.getServers().getApplicationDetails()

Другие советы

Вы можете получить граф объекта, как говорили другие, используя LEFT JOIN FECH.При извлечении графов объектов я обнаружил одну проблему: при переходе по отношению «многие к одному» вы не можете вернуться назад без дополнительного доступа к базе данных.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top