معايير السبات: ترك الانضمام الخارجي إلى القيود المفروضة على كلا الجدولين

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

سؤال

أقوم بانضمام خارجي غادر، لكنني فقط قادر على تطبيق القيود المفروضة على الطاولة الأولى. هل هناك طريقة تتي تطبيقها على الطاولة الثانية كذلك؟

هنا هو رمزي:

Criteria criteria = this.crudService
        .initializeCriteria(Applicant.class).setFetchMode("products",
              FetchMode.JOIN);.

هذه الأعمال (مقدم الطلب لديه خاصية مقدم الطلب):

criteria.add(Restrictions.eq("applicantName", "Markos")

أيا من هذه الأعمال (المنتج لديه خاصية اسم المنتج)

criteria.add(Restrictions.eq("productName", "product1")

المعايير "القيود" ("القيود" ("المنتجات" الإنتاج "، Product1") / المنتجات: اسم معايير العقارات .ADD (القيود. اسم جدول DB

وهذا هو الاستثناء الذي أتلقى قائلا (إذا فهمت بشكل صحيح) أن خاصية اسم المنتج غير موجودة في مقدم الطلب:

EJB Exception: ; nested exception is: org.hibernate.QueryException: could not resolve property: products.inventedName of: org.myCompany.applicant.entity.Applicant; nested exception is: org.hibernate.QueryException: could not resolve property: products.inventedName of: org.myCompany.applicant.entity.Applicant

حاولت استخدام اسم مستعار، لكن هذا قد ولدت انضماما داخليا، بدلا من الانضمام الخارجي الأيسر الذي أريده.

كيف يمكنني تطبيق القيود على كلا الجدولين؟

تحديث:

المشكلة ربما هي نفسها:https://forum.habernate.org/viewtopic.php؟p=2393694.

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

المحلول

يمكنك تحديد الانضمام الخارجي الأيسر في Resignealias ...

.CreateAlias("products", "p", NHibernate.SqlCommand.JoinType.LeftOuterJoin)
.Add(Restrictions.Eq("p.inventedName", inventedName));

كن على دراية بأنك تقوم بانضمام خارجي غادر بتقييد على هذا العمود ... مما يجعله في الأساس أن ينضمون داخلي. إذا كنت تريد أيضا مقدمو الطلبات بدون منتجات، فسيتعين عليك التحقق من منتج NULL أيضا.

نصائح أخرى

تحديث:

.CreateAlias("products", "p", JoinType.LEFT_OUTER_JOIN)
.Add(Restrictions.Eq("p.inventedName", inventedName));

حل هذه مشكلتي في إنشاء معايير جديدة ويمكنني استخدام Left_outer_join في كلتا الحالتين.

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