Querydsl: مشكلة في الجلب عندما يكون selfJoin في الاستعلام

تم إنشاؤها على ٢٥ أبريل ٢٠١٩  ·  4تعليقات  ·  مصدر: querydsl/querydsl

أواجه حالة انضممت فيها إلى الجدول.
الاستعلام المصنع
.select (queryBase.getColumns ())
.from (الكيان مسار)
.leftJoin (QTodoEntity.todoEntity.parentLocation، QTodoEntity.todoEntity)
.leftJoin (QTodoEntity.locationEntity.country، QCountryEntity.countryEntity)
.where (queryBase.getFilters ())
.orderBy (queryBase.getOrderBy ())
.offset (queryBase.getOffset ())
.limit (queryBase.getLimit ())
.أحضر()
.مجرى()
.map (queryBase :: mapRow)
.collect (Collectors.toList ()) ؛

يتم استخدام الاسم المستعار لـ QTodoEntity الذي تم إنشاؤه عند الصلة اليسرى في كل مكان في الاستعلام. بينما يجب أن يستخدم الاسم المستعار الذي تم إنشاؤه عند الاختيار من.
الاستعلام يشبه

حدد todo1.id ، todo1.name ، todo1.custom ، todo1.selfChild من Todo todoOnSelect الرابط الخارجي الأيسر Todo todo1 في todoOnSelect.selfChild = todo1.id

لكن الاستعلام يجب أن يكون -
حدد todoOnSelect.id، todoOnSelect.name، todoOnSelect.custom، todoOnSelect.selfChild من Todo todoOnSelect.

التعليق الأكثر فائدة

جرب شيئًا كهذا -
فئة QCategory = QCategory.category ؛
QCategory subCategory = new QCategory ("sub") ؛
الاستعلام. من (فئة)
.leftJoin (category.subcategory، subCategory).
.where (category.type.equalsIgnoreCase ("A"))
.fetchCount () ،

سيعطي هذا اسمًا مستعارًا للفئة الفرعية وفي المكان الذي ستختار فيه الفقرة الكيان الرئيسي ، وليس الكيان المرتبط الأيسر.

ال 4 كومينتر

هذا ليس خطأ.

هذا ليس خطأ.

كيف حل هذا؟ أواجه نفس المشكلة ، حيث تستخدم عبارة أين الاسم المستعار "الصلة اليسرى" ، بدلاً من الاسم المستعار "من" ، والنتائج غير صحيحة.

انا احصل:
select count(sub.id) from category c
left join category sub on c.id = sub.id
where sub.type='A'

يجب أن يكون:
select count(c.id) from category c
left join category sub on c.id = sub.id
where c.type='A'

ها هو الاستعلام DSL:
QCategory category = QCategory.category;
query.from(category)
.leftJoin(category.subcategory, QCategory.category)
.where(category.type.equalsIgnoreCase("A"))
.fetchCount();
شكرا

جرب شيئًا كهذا -
فئة QCategory = QCategory.category ؛
QCategory subCategory = new QCategory ("sub") ؛
الاستعلام. من (فئة)
.leftJoin (category.subcategory، subCategory).
.where (category.type.equalsIgnoreCase ("A"))
.fetchCount () ،

سيعطي هذا اسمًا مستعارًا للفئة الفرعية وفي المكان الذي ستختار فيه الفقرة الكيان الرئيسي ، وليس الكيان المرتبط الأيسر.

جرب شيئًا كهذا -
فئة QCategory = QCategory.category ؛
QCategory subCategory = new QCategory ("sub") ؛
الاستعلام. من (فئة)
.leftJoin (category.subcategory، subCategory).
.where (category.type.equalsIgnoreCase ("A"))
.fetchCount () ،

سيعطي هذا اسمًا مستعارًا للفئة الفرعية وفي المكان الذي ستختار فيه الفقرة الكيان الرئيسي ، وليس الكيان المرتبط الأيسر.

لست متأكدًا من سبب نجاحها ، لكنها فعلت الحيلة بالتأكيد.
شكرا جزيلا!
:)

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

القضايا ذات الصلة

viktorgt picture viktorgt  ·  3تعليقات

jmpicnic picture jmpicnic  ·  7تعليقات

fe2s picture fe2s  ·  6تعليقات

Ghalleb picture Ghalleb  ·  4تعليقات

mjungsbluth picture mjungsbluth  ·  6تعليقات