sql >> Databáze >  >> RDS >> Oracle

Kritéria hibernace pro data

Proč používáte Restrictions.like(... )?

Měli byste použít Restrictions.eq(...) .

Všimněte si, že můžete také použít .le , .lt , .ge , .gt on date objekty jako operátory porovnání. LIKE operátor není pro tento případ vhodný, protože LIKE je užitečné, když chcete porovnávat výsledky podle částečného obsahu sloupce. Referenční informace najdete na http://www.sql-tutorial.net/SQL-LIKE.asp.

Pokud máte například sloupec se jménem s celým jménem některých lidí, můžete to udělat where name like 'robert %' takže vrátíte všechny položky se jménem začínajícím 'robert ' (% může nahradit jakýkoli znak).

Ve vašem případě znáte celý obsah data, které se pokoušíte najít, takže byste neměli používat LIKE ale rovnost. Myslím, že Hibernate vám v tomto případě nedává žádnou výjimku, ale stejně budete mít pravděpodobně stejný problém s Restrictions.eq(...) .

Váš objekt data, který jste dostali s kódem:

SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-YYYY");
String myDate = "17-04-2011";
Date date = formatter.parse(myDate);

Tento objekt data se rovná 17-04-2011 v 0h, 0 minutách, 0 sekundách a 0 nanosekundách.

To znamená, že vaše záznamy v databázi musí mít přesně to datum. Chci říct, že pokud má váš záznam v databázi datum „17-April-2011 19:20:23.707000000“, pak nebude načten, protože se jen zeptáte na toto datum:„17-April-2011 00:00:00,0000000000".

Pokud chcete načíst všechny položky vaší databáze z daného dne, budete muset použít následující kód:

    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) ); 


  1. Převést „smalldatetime“ na „datetime“ v SQL Server (příklady T-SQL)

  2. kódování UTF8 neodpovídá národnímu prostředí en_US; zvolené nastavení LC_CTYPE vyžaduje kódování LATIN1

  3. PlanetScale &Vitess:Referenční integrita se staršími sdílenými databázemi

  4. Zobrazte data SQLite v RecyclerView