Estoy teniendo un caso en el que me he unido en la mesa.
queryFactory
.select (queryBase.getColumns ())
.from (entityPath)
.leftJoin (QTodoEntity.todoEntity.parentLocation, QTodoEntity.todoEntity)
.leftJoin (QTodoEntity.locationEntity.country, QCountryEntity.countryEntity)
.donde (queryBase.getFilters ())
.orderBy (queryBase.getOrderBy ())
.offset (queryBase.getOffset ())
.limit (queryBase.getLimit ())
.ir a buscar()
.Arroyo()
.map (queryBase :: mapRow)
.collect (Collectors.toList ());
El alias de QTodoEntity creado en la combinación izquierda se usa en todas partes de la consulta. Si bien debería usar el alias que se creó al seleccionar desde.
La consulta se parece a
seleccione todo1.id, todo1.name, todo1.custom, todo1.selfChild de Todo todoOnSelect unión externa izquierda Todo todo1 en todoOnSelect.selfChild = todo1.id
pero la consulta debe ser -
seleccione todoOnSelect.id, todoOnSelect.name, todoOnSelect.custom, todoOnSelect.selfChild de Todo todoOnSelect unión externa izquierda Todo todo1 en todoOnSelect.selfChild = todo1.id
Esto no es un error.
Esto no es un error.
Como resolviste esto? Tengo el mismo problema, la cláusula where usa el alias de 'unión izquierda', en lugar del alias 'de', y los resultados son incorrectos.
Me estoy poniendo:
select count(sub.id) from category c
left join category sub on c.id = sub.id
where sub.type='A'
Debería ser:
select count(c.id) from category c
left join category sub on c.id = sub.id
where c.type='A'
Aquí está la queryDsl:
QCategory category = QCategory.category;
query.from(category)
.leftJoin(category.subcategory, QCategory.category)
.where(category.type.equalsIgnoreCase("A"))
.fetchCount();
Gracias
Prueba algo como esto:
Categoría QCategory = QCategory.category;
QCategory subCategory = new QCategory ("sub");
query.from (categoría)
.leftJoin (categoría.subcategoría, subCategoría)
.donde (category.type.equalsIgnoreCase ("A"))
.fetchCount ();
Esto le dará un alias a la subCategoría y en la cláusula where elegirá la entidad principal, no la que se unió a la izquierda.
Prueba algo como esto:
Categoría QCategory = QCategory.category;
QCategory subCategory = new QCategory ("sub");
query.from (categoría)
.leftJoin (categoría.subcategoría, subCategoría)
.donde (category.type.equalsIgnoreCase ("A"))
.fetchCount ();Esto le dará un alias a la subCategoría y en la cláusula where elegirá la entidad principal, no la que se unió a la izquierda.
No estoy seguro de por qué funciona, pero seguro que funcionó.
¡Muchas gracias!
:)
Comentario más útil
Prueba algo como esto:
Categoría QCategory = QCategory.category;
QCategory subCategory = new QCategory ("sub");
query.from (categoría)
.leftJoin (categoría.subcategoría, subCategoría)
.donde (category.type.equalsIgnoreCase ("A"))
.fetchCount ();
Esto le dará un alias a la subCategoría y en la cláusula where elegirá la entidad principal, no la que se unió a la izquierda.