بنية كائن جيدة لنتائج الصلة الخارجية اليسرى للإسبات

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

سؤال

أحتاج إلى إجراء استعلام ربط خارجي يسترد كافة التعريفات وأي خصائص مرتبطة بها مرتبطة بشركة معينة.

لدي كائنين من نماذج السبات:

class PropertyDefinition {
    @Id
    private Long id;

    @Column
    private String name;

    @OneToMany(mappedBy = "propertyDefinition")
    private Set<Property> properties = new HashSet<Property>();
}

class Property {
   @Id
   private Long id;

   @ManyToOne
   private Integer companyId;

   @ManyToOne
   private PropertyDefinition propertyDefinition;
}

لذلك ينتهي الاستعلام بالشكل التالي:

from PropertyDefinition as pd left join pd.properties as props with props.companyId = :companyId

لذلك كل شيء خوخي حتى الآن.المشكلة التي أواجهها هي ما نوع البنية التي أقوم بتخزين البيانات التي تم إرجاعها فيها؟يقوم Hibernate بإرجاع قائمة حيث يكون [0] هو PropertyDefinition (يجب ألا يكون فارغًا أبدًا) و[1] هو الخاصية التي من المحتمل أن تكون فارغة.

مشاكلي:

  • إنه أمر بغيض وغير ودود للغاية لتمرير قائمة الكائنات [] العناصر.
  • لا يمكنني التمسك بـ PropertyDefinition لأن قائمة الخصائص التي يحتفظ بها لا تقتصر على الشركة.
  • يمكنني إنشاء كائن بسيط يحتوي على مرجع إلى PropertyDefinition وربما خاصية فارغة ولكن من غير الفعال أن تضطر إلى التكرار عبر القائمة بأكملها ووضع كل منها في هذا الكائن الجديد.

هل لدى أي شخص اقتراح لاستعلام أفضل أو بنية رسم خرائط أفضل؟سأقدر حقًا أي مساعدة.

هل كانت مفيدة؟

المحلول

حسنًا، من الأفضل التعامل مع الانضمام الأيسر عادةً عبر أحضر والتي تقوم بإرجاع قائمة كائنات الحاوية مع المجموعات المأهولة.ومع ذلك، بما أنك تستخدم with الشرط، وهذا لن يعمل بالنسبة لك.

إذا كنت تريد إنشاء حامل بسيط لـ PropertyDefinition و Property باستخدام المُنشئ العام المناسب، يمكنك إخبار Hibernate بإرجاع ما يلي:

select new Holder(pd, props)
  from PropertyDefinition as pd
  left join pd.properties as props
  with props.companyId = :companyId

وينبغي أن تهتم بالمشكلات التي ذكرتها؛إنه ليس مثاليًا ولكنه ربما يكون الحل الأفضل المتاح في ظل هذه الظروف.

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