У меня случай, когда я сам присоединяюсь к столу.
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 ())
.принести()
.транслировать()
.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 левое внешнее соединение Todo todo1 на todoOnSelect.selfChild = todo1.id
Это не ошибка.
Это не ошибка.
Как вы это решили? У меня та же проблема, в предложении where используется псевдоним «left join» вместо псевдонима from, и результаты неверны.
Я получаю:
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'
Вот queryDsl:
QCategory category = QCategory.category;
query.from(category)
.leftJoin(category.subcategory, QCategory.category)
.where(category.type.equalsIgnoreCase("A"))
.fetchCount();
Спасибо
Попробуйте что-то вроде этого -
QCategory category = QCategory.category;
QCategory subCategory = новая QCategory ("под");
query.from (категория)
.leftJoin (категория.подкатегория, подкатегория)
.where (category.type.equalsIgnoreCase ("A"))
.fetchCount ();
Это даст псевдоним subCategory, и в предложении where будет выбрана основная сущность, а не присоединенная слева.
Попробуйте что-то вроде этого -
QCategory category = QCategory.category;
QCategory subCategory = новая QCategory ("под");
query.from (категория)
.leftJoin (категория.подкатегория, подкатегория)
.where (category.type.equalsIgnoreCase ("A"))
.fetchCount ();Это даст псевдоним subCategory, и в предложении where будет выбрана основная сущность, а не присоединенная слева.
Не уверен, почему это работает, но это определенно помогло.
Большое спасибо!
:)
Самый полезный комментарий
Попробуйте что-то вроде этого -
QCategory category = QCategory.category;
QCategory subCategory = новая QCategory ("под");
query.from (категория)
.leftJoin (категория.подкатегория, подкатегория)
.where (category.type.equalsIgnoreCase ("A"))
.fetchCount ();
Это даст псевдоним subCategory, и в предложении where будет выбрана основная сущность, а не присоединенная слева.