Mengapa Anda menggunakan Restrictions.like(...
)?
Anda harus menggunakan Restrictions.eq(...)
.
Catatan Anda juga dapat menggunakan .le
, .lt
, .ge
, .gt
pada objek tanggal sebagai operator perbandingan. LIKE
operator tidak sesuai untuk kasus ini karena LIKE
berguna ketika Anda ingin mencocokkan hasil menurut sebagian isi kolom. Silakan lihat http://www.sql-tutorial.net/SQL-LIKE.asp untuk referensi.
Misalnya jika Anda memiliki kolom nama dengan nama lengkap beberapa orang, Anda dapat melakukan where name like 'robert %'
sehingga Anda akan mengembalikan semua entri dengan nama yang dimulai dengan 'robert '
(%
dapat mengganti karakter apa pun).
Dalam kasus Anda, Anda tahu konten lengkap dari tanggal yang Anda coba cocokkan sehingga Anda tidak boleh menggunakan LIKE
tapi kesetaraan. Saya kira Hibernate tidak memberi Anda pengecualian apa pun dalam kasus ini, tetapi bagaimanapun Anda mungkin akan memiliki masalah yang sama dengan Restrictions.eq(...)
.
Objek tanggal Anda yang Anda dapatkan dengan kode:
SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-YYYY");
String myDate = "17-04-2011";
Date date = formatter.parse(myDate);
Objek tanggal ini sama dengan 17-04-2011 pada 0 jam, 0 menit, 0 detik dan 0 nanodetik.
Ini berarti bahwa entri Anda dalam basis data harus memiliki tepat tanggal itu. Maksud saya adalah jika entri database Anda memiliki tanggal "17-April-2011 19:20:23.707000000", maka itu tidak akan diambil karena Anda hanya meminta tanggal itu:"17-April-2011 00:00:0,0000000000".
Jika Anda ingin mengambil semua entri database Anda dari hari tertentu, Anda harus menggunakan kode berikut:
SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-YYYY");
String myDate = "17-04-2011";
// Create date 17-04-2011 - 00h00
Date minDate = formatter.parse(myDate);
// Create date 18-04-2011 - 00h00
// -> We take the 1st date and add it 1 day in millisecond thanks to a useful and not so known class
Date maxDate = new Date(minDate.getTime() + TimeUnit.DAYS.toMillis(1));
Conjunction and = Restrictions.conjunction();
// The order date must be >= 17-04-2011 - 00h00
and.add( Restrictions.ge("orderDate", minDate) );
// And the order date must be < 18-04-2011 - 00h00
and.add( Restrictions.lt("orderDate", maxDate) );