السبات كيفية استرداد التسلسل الهرمي كائن

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

  •  06-07-2019
  •  | 
  •  

سؤال

لدي التالية الفاصوليا المهمة ، ServerDetails و ApplicationDetails.أتمنى لاسترداد كافة المهام الخادم الخاص بهم تفاصيل تفاصيل التطبيق على أساس محدد اسم التطبيق.

من النتيجة أتوقع أن تكون قادرة على استرداد البيانات بطريقة مثل:المهمة.getServers().getApplicationDetails()

في واقع الأمر, أحصل على ما يبدو أن تكون مسطحة البيانات تمثيل ككائن[].

هل هناك أي طريقة أن تفعل ما اقترح ؟

التالي هو قانون بلدي...

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();
هل كانت مفيدة؟

المحلول

يجب عليك فقط استرداد الهدف الرئيسي.

الأخرى, يمكنك:

  1. تنقل لهم حين Session قد لا تكون مغلقة (يعمل استفسارات إضافية حسب الحاجة ، المعروفة باسم كسول ، هذا هو المثل الأعلى لسهولة الاستخدام)
  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. واحد crevent لقد وجدت عند استرداد الرسوم البيانية وجوه، عندما يسير علاقة عديدة الى واحد لا يمكنك المشي مرة أخرى من دون الوصول إلى قاعدة بيانات إضافية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top