Saya memiliki kasus di mana saya memiliki self join di tabel.
permintaanPabrik
.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())
.mengambil()
.sungai kecil()
.map(queryBase::mapRow)
.collect(Collectors.toList());
Alias dari QTodoEntity yang dibuat di gabungan kiri digunakan di mana saja dalam kueri. Sementara itu harus menggunakan alias yang dibuat pada pilih dari.
Permintaan terlihat seperti
pilih todo1.id, todo1.name, todo1.custom, todo1.selfChild dari Todo todoOnSelect kiri luar gabung Todo todo1 di todoOnSelect.selfChild=todo1.id
tetapi permintaan harus -
pilih todoOnSelect.id, todoOnSelect.name, todoOnSelect.custom, todoOnSelect.selfChild dari Todo todoOnSelect kiri luar gabung Todo todo1 di todoOnSelect.selfChild=todo1.id
Ini bukan bug.
Ini bukan bug.
Bagaimana Anda menyelesaikan ini? Saya mengalami masalah yang sama, klausa where menggunakan alias 'gabung kiri', bukan alias 'dari', dan hasilnya salah.
Saya mendapatkan:
select count(sub.id) from category c
left join category sub on c.id = sub.id
where sub.type='A'
Harus:
select count(c.id) from category c
left join category sub on c.id = sub.id
where c.type='A'
Inilah queryDsl:
QCategory category = QCategory.category;
query.from(category)
.leftJoin(category.subcategory, QCategory.category)
.where(category.type.equalsIgnoreCase("A"))
.fetchCount();
Terima kasih
Coba sesuatu seperti ini -
Kategori QCategory = QCategory.category;
QCategory subCategory = new QCategory("sub");
kueri.dari(kategori)
.leftJoin(kategori.subkategori, subkategori)
.where(category.type.equalsIgnoreCase("A"))
.fetchCount();
Ini akan memberikan alias ke subCategory dan di mana klausa itu akan memilih entitas utama, bukan yang bergabung kiri.
Coba sesuatu seperti ini -
Kategori QCategory = QCategory.category;
QCategory subCategory = new QCategory("sub");
kueri.dari(kategori)
.leftJoin(kategori.subkategori, subkategori)
.where(category.type.equalsIgnoreCase("A"))
.fetchCount();Ini akan memberikan alias ke subCategory dan di mana klausa itu akan memilih entitas utama, bukan yang bergabung kiri.
Tidak yakin mengapa itu berhasil, tetapi itu pasti berhasil.
Terima kasih banyak!
:)
Komentar yang paling membantu
Coba sesuatu seperti ini -
Kategori QCategory = QCategory.category;
QCategory subCategory = new QCategory("sub");
kueri.dari(kategori)
.leftJoin(kategori.subkategori, subkategori)
.where(category.type.equalsIgnoreCase("A"))
.fetchCount();
Ini akan memberikan alias ke subCategory dan di mana klausa itu akan memilih entitas utama, bukan yang bergabung kiri.