Querydsl: Masalah dalam pengambilan saat selfJoin sedang dalam kueri

Dibuat pada 25 Apr 2019  ·  4Komentar  ·  Sumber: querydsl/querydsl

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

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.

Semua 4 komentar

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!
:)

Apakah halaman ini membantu?
0 / 5 - 0 peringkat