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.
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
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.