Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Kryteria hibernacji dla dat

Dlaczego używasz Restrictions.like(... )?

Powinieneś użyć Restrictions.eq(...) .

Pamiętaj, że możesz również użyć .le , .lt , .ge , .gt na obiektach daty jako operatory porównania. LIKE operator nie jest odpowiedni w tym przypadku, ponieważ LIKE jest przydatne, gdy chcesz dopasować wyniki zgodnie z częściową zawartością kolumny. Więcej informacji znajdziesz na stronie http://www.sql-tutorial.net/SQL-LIKE.asp.

Na przykład, jeśli masz kolumnę nazw z pełnym imieniem i nazwiskiem niektórych osób, możesz wykonać where name like 'robert %' dzięki czemu zwrócisz wszystkie wpisy o nazwach zaczynających się od 'robert ' (% może zastąpić dowolny znak).

W Twoim przypadku znasz pełną treść daty, którą próbujesz dopasować, więc nie powinieneś używać LIKE ale równość. Sądzę, że Hibernate nie daje w tym przypadku żadnego wyjątku, ale i tak prawdopodobnie będziesz mieć ten sam problem z Restrictions.eq(...) .

Twój obiekt z datą, który otrzymałeś z kodem:

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

Ten obiekt daty jest równy 17-04-2011 na 0h, 0 minutach, 0 sekundach i 0 nanosekundach.

Oznacza to, że Twoje wpisy w bazie danych muszą mieć dokładnie ta randka. Mam na myśli to, że jeśli wpis w bazie danych zawiera datę „17-kwiecień-2011 19:20:23.707000000”, to nie zostanie on pobrany, ponieważ po prostu pytasz o tę datę:„17-kwiecień-2011 00:00:00.00000000000".

Jeśli chcesz pobrać wszystkie wpisy do swojej bazy danych z danego dnia, będziesz musiał użyć następującego kodu:

    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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak uzyskać parametr wyjściowy procedury składowanej, który jest tablicą do pracy?

  2. Zastępowanie tekstu w kolumnie BLOB

  3. Jak wywołać supermetodę obiektu Oracle PL/SQL?

  4. Wykryj, czy wartość zawiera co najmniej jedną cyfrę w Oracle

  5. Dlaczego ta zbiorcza aktualizacja szablonu hibernacji nie działa