أواجه حالة انضممت فيها إلى الجدول.
الاستعلام المصنع
.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.
هذا ليس خطأ.
هذا ليس خطأ.
كيف حل هذا؟ أواجه نفس المشكلة ، حيث تستخدم عبارة أين الاسم المستعار "الصلة اليسرى" ، بدلاً من الاسم المستعار "من" ، والنتائج غير صحيحة.
انا احصل:
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 () ،سيعطي هذا اسمًا مستعارًا للفئة الفرعية وفي المكان الذي ستختار فيه الفقرة الكيان الرئيسي ، وليس الكيان المرتبط الأيسر.
لست متأكدًا من سبب نجاحها ، لكنها فعلت الحيلة بالتأكيد.
شكرا جزيلا!
:)
التعليق الأكثر فائدة
جرب شيئًا كهذا -
فئة QCategory = QCategory.category ؛
QCategory subCategory = new QCategory ("sub") ؛
الاستعلام. من (فئة)
.leftJoin (category.subcategory، subCategory).
.where (category.type.equalsIgnoreCase ("A"))
.fetchCount () ،
سيعطي هذا اسمًا مستعارًا للفئة الفرعية وفي المكان الذي ستختار فيه الفقرة الكيان الرئيسي ، وليس الكيان المرتبط الأيسر.