Querydsl: Perluas any() Perilaku untuk mengizinkan lebih dari satu Predikat

Dibuat pada 7 Nov 2014  ·  6Komentar  ·  Sumber: querydsl/querydsl

Sejauh yang saya Anda desuce dari kode sumber any() hanya menggunakan Path tertentu yang kemudian diubah selama serialisasi. Jika Anda melakukan sesuatu seperti
collectionProperty.any().prop1.eq("value1").and(collectionProperty.any().prop2.eq("value2")
Ini akan menghasilkan dua subquery terpisah. Saya tidak dapat menemukan cara apa pun untuk alias any() dengan cara apa pun untuk mencapai apa yang saya kejar. Tentu saja saya dapat menggunakan JpaSubQuery tetapi itu benar-benar bertele-tele dan jelek untuk kasus-kasus ini dan saya lebih suka predikat yang lebih sederhana.

Dalam kasus penggunaan kami, Predikat yang diparameterisasi dengan ParamS digunakan di antarmuka pengguna untuk menghasilkan panel filter yang memungkinkan untuk mengisi params dan mengirim Predikat yang diisi ke backend yang kemudian dieksekusi (melalui pengunjung yang menggantikan param). Ini terlihat sangat elegan dari sudut pandang pengembang karena sangat mudah untuk menambahkan kondisi baru yang relatif agnostik dengan bagaimana mereka akan dieksekusi.
Saat Anda harus menggunakan definisi subquery di frontend, hal-hal mulai terlihat sedikit bertele-tele dan rasanya salah untuk melakukan ini.

feature

Komentar yang paling membantu

SEBUAH)
alias = new QEntity("alias");
predikat = collectionProperty.any(alias, alias.prop1.eq().and(alias.eq()))
B)
alias = new QEntity("alias");
koleksiProperty.any().as(alias)
alias.eq().and(alias....)
C) mengubah perilaku di CollectionAnyVisitor dan menciutkan beberapa Jalur apa pun di subpohon ekspresi (bisa berbahaya.

Saya lebih suka sth di sepanjang baris A karena ini akan menjadi yang paling jelas bagi pengembang karena akan muncul dalam penyelesaian kode yang paralel dengan any(). Pada masing-masing pengunjung akan langsung menempatkan kondisi pada klausa where dari subquery dan menggunakan alias pada join yang diperlukan.

Semua 6 komentar

Apakah Anda memiliki beberapa saran bagaimana ini bisa dilakukan secara sintaksis?

SEBUAH)
alias = new QEntity("alias");
predikat = collectionProperty.any(alias, alias.prop1.eq().and(alias.eq()))
B)
alias = new QEntity("alias");
koleksiProperty.any().as(alias)
alias.eq().and(alias....)
C) mengubah perilaku di CollectionAnyVisitor dan menciutkan beberapa Jalur apa pun di subpohon ekspresi (bisa berbahaya.

Saya lebih suka sth di sepanjang baris A karena ini akan menjadi yang paling jelas bagi pengembang karena akan muncul dalam penyelesaian kode yang paralel dengan any(). Pada masing-masing pengunjung akan langsung menempatkan kondisi pada klausa where dari subquery dan menggunakan alias pada join yang diperlukan.

+1

+1

+1

+1

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

intuitiveminds picture intuitiveminds  ·  8Komentar

okihouse picture okihouse  ·  5Komentar

viktorgt picture viktorgt  ·  3Komentar

devcken picture devcken  ·  6Komentar

pascal-hofmann picture pascal-hofmann  ·  4Komentar