Oracle
 sql >> база данни >  >> RDS >> Oracle

Критерии за хибернация за дати

Защо използвате 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);

Този обект за дата е равен на 17-04-2011 в 0 часа, 0 минути, 0 секунди и 0 наносекунди.

Това означава, че вашите записи в базата данни трябва да имат точно тази дата. Имам предвид, че ако записът ви в базата данни има дата "17-април-2011 19:20:23.707000000", тогава той няма да бъде извлечен, защото просто поискате тази дата:"17-април-2011 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) ); 


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. изтрийте дублиращи се редове от Oracle

  2. Oracle Apex 5.0 – Показване на статично изображение

  3. Съобщение за грешка в sqldeveloper:Мрежовият адаптер не можа да установи грешката при връзката

  4. ORA-24247:достъпът до мрежата е отказан от списъка за контрол на достъпа (ACL)

  5. Oracle към Excel - процедура за експортиране на PL/SQL