Oke, setelah banyak bereksperimen dengan berbagai strategi, inilah yang saya lakukan yang akhirnya berhasil.
Saya melihat posting ini disini
dan tiba-tiba teringat JPA Tuple
Antarmuka yang merupakan Objek yang dapat mengembalikan beberapa Jenis hasil. Jadi untuk melakukan like
saya perbandingan, dan karena Tanggal tidak bisa begitu saja dilemparkan ke String, inilah langkah-langkahnya;
- Saya mendapatkan kolom sebagai
Tuple
- lakukan pemeriksaan pada Objek Tuple untuk melihat apakah itu dapat ditetapkan dari Tanggal
- jika ya, dapatkan ekspresi Format-Tanggal dan berikan ke
like
ekspresi.
Jadi intinya, inilah yang awalnya saya miliki yang tampaknya gagal;
predicates.add(cb.like(cb.lower(entity.get("dateJoined").as(String.class)), "%"+search.toLowerCase()+"%"));
Sekarang, inilah yang saya miliki yang berfungsi dengan baik;
Path<Tuple> tuple = entity.<Tuple>get("dateJoined");
if(tuple.getJavaType().isAssignableFrom(Date.class)){
Expression<String> dateStringExpr = cb.function("DATE_FORMAT", String.class, entity.get("dateJoined"), cb.literal("'%d/%m/%Y %r'"));
predicates.add(cb.like(cb.lower(dateStringExpr), "%"+search.toLowerCase()+"%"));
}
PERTIMBANGAN YANG PERLU DIPERHATIKAN -
- Saya sadar bahwa dari mana pun pencarian akan dimulai, semua Tanggal saya ditampilkan dalam bentuk ini
07/10/2015 10:25:09 PM
karenanya kemampuan saya untuk mengetahui cara memformat Tanggal untuk perbandingan dilike
my saya ekspresikan sebagai"'%d/%m/%Y %r'"
. - Ini hanya satu langkah yang berhasil untuk Dates. Sebagian besar Jenis lainnya misalnya int, long, char ...etc... semuanya dapat langsung Cast to String dan saat saya menjelajahi lebih banyak Jenis data, saya pasti akan melakukan hal yang sama untuk Jenis lain yang tidak dapat langsung Cast to String .
Meskipun ini bekerja dengan sempurna untuk saya, tetapi sebelum saya menandai ini sebagai jawaban yang benar, saya akan menjalani beberapa tes yang lebih ekstensif dan dalam prosesnya tetap terbuka untuk komentar oleh siapa pun yang memiliki keraguan tentang strategi saya.
Dan akhirnya, untuk satu orang yang membantu dengan cara apa pun... Semangat!