Ich habe einen Fall, in dem ich mich selbst in die Tabelle einfüge.
queryFactory
.select(queryBase.getColumns())
.from(entityPath)
.leftJoin(QTodoEntity.todoEntity.parentLocation, QTodoEntity.todoEntity)
.leftJoin(QTodoEntity.locationEntity.country, QCountryEntity.countryEntity)
.where(queryBase.getFilters())
.orderBy(queryBase.getOrderBy())
.offset(queryBase.getOffset())
.limit(queryBase.getLimit())
.bringen()
.Strom()
.map(queryBase::mapRow)
.collect(Collectors.toList());
Der Alias der beim linken Join erstellten QTodoEntity wird überall in der Abfrage verwendet. Es sollte jedoch den Alias verwenden, der bei der Auswahl erstellt wurde.
Abfrage sieht so aus
select todo1.id, todo1.name, todo1.custom, todo1.selfChild von Todo todoOnSelect linker äußerer Join Todo todo1 auf todoOnSelect.selfChild=todo1.id
aber Abfrage sollte sein -
select todoOnSelect.id, todoOnSelect.name, todoOnSelect.custom, todoOnSelect.selfChild von Todo todoOnSelect linker äußerer Join Todo todo1 auf todoOnSelect.selfChild=todo1.id
Dies ist kein Fehler.
Dies ist kein Fehler.
Wie haben Sie das gelöst? Ich habe das gleiche Problem, die where-Klausel verwendet den Alias "left Join" anstelle des Alias "from", und die Ergebnisse sind falsch.
Ich erhalte:
select count(sub.id) from category c
left join category sub on c.id = sub.id
where sub.type='A'
Es sollte sein:
select count(c.id) from category c
left join category sub on c.id = sub.id
where c.type='A'
Hier ist die queryDsl:
QCategory category = QCategory.category;
query.from(category)
.leftJoin(category.subcategory, QCategory.category)
.where(category.type.equalsIgnoreCase("A"))
.fetchCount();
Vielen Dank
Versuchen Sie so etwas -
QCategory-Kategorie = QCategory.category;
QCategory subCategory = new QCategory("sub");
query.from(Kategorie)
.leftJoin(category.subcategory, subcategory)
.where(category.type.equalsIgnoreCase("A"))
.fetchCount();
Dadurch wird subCategory ein Alias zugewiesen, und in der WHERE-Klausel wird die Hauptentität ausgewählt, nicht die links verbundene.
Versuchen Sie so etwas -
QCategory-Kategorie = QCategory.category;
QCategory subCategory = new QCategory("sub");
query.from(Kategorie)
.leftJoin(category.subcategory, subcategory)
.where(category.type.equalsIgnoreCase("A"))
.fetchCount();Dadurch wird subCategory ein Alias zugewiesen, und in der WHERE-Klausel wird die Hauptentität ausgewählt, nicht die links verbundene.
Nicht sicher, warum es funktioniert, aber es hat auf jeden Fall den Zweck erfüllt.
Ich danke dir sehr!
:)
Hilfreichster Kommentar
Versuchen Sie so etwas -
QCategory-Kategorie = QCategory.category;
QCategory subCategory = new QCategory("sub");
query.from(Kategorie)
.leftJoin(category.subcategory, subcategory)
.where(category.type.equalsIgnoreCase("A"))
.fetchCount();
Dadurch wird subCategory ein Alias zugewiesen, und in der WHERE-Klausel wird die Hauptentität ausgewählt, nicht die links verbundene.