なぜRestrictions.like(...
)を使用するのですか )?
Restrictions.eq(...)
を使用する必要があります 。
.le
も使用できることに注意してください 、.lt
、.ge
、.gt
比較演算子としての日付オブジェクト。 LIKE
LIKE
であるため、演算子はこの場合には適切ではありません 列の部分的な内容に従って結果を照合する場合に役立ちます。参照については、http://www.sql-tutorial.net/SQL-LIKE.aspを参照してください。
たとえば、一部の人のフルネームを含む名前列がある場合は、where name like 'robert %'
を実行できます。 'robert '
で始まる名前のすべてのエントリを返すようにします (%
任意の文字を置き換えることができます。
あなたの場合、一致させようとしている日付の完全な内容を知っているので、LIKE
を使用しないでください しかし平等。この場合、Hibernateは例外を与えないと思いますが、とにかく、Restrictions.eq(...)
でも同じ問題が発生する可能性があります。 。
コードで取得した日付オブジェクト:
SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-YYYY");
String myDate = "17-04-2011";
Date date = formatter.parse(myDate);
この日付オブジェクトは、2011年4月17日の0時間、0分、0秒、および0ナノ秒に相当します。
これは、データベースのエントリが正確にある必要があることを意味します その日付。つまり、データベースエントリの日付が「2011年4月17日19:20:23.707000000」の場合、その日付を要求するだけなので取得されません:「2011年4月17日00:00: 00.0000000000"。
特定の日からデータベースのすべてのエントリを取得する場合は、次のコードを使用する必要があります。
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) );