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

Как да избегнем две различни нишки да четат едни и същи редове от DB (Hibernate и Oracle 10g)

Трябва да използвате PESSIMISTIC_WRITE по време на заявка:

Query q = session
    .createQuery("from MyObject n where n.state = 'NEW'")
    .setLockOptions(new LockOptions(LockMode.PESSIMISTIC_WRITE));
List<MyObject> list = (List<MyObject>) q.list();

Заключването на родителските обекти е достатъчно. Няма непременно да възникнат безизходици. Може да получите неуспешно получаване на заключване, ако нишката, която държи заключването, не го освободи преди друга нишка от изчакване на изчакване.

Тъй като използвате Oracle, ето как ИЗБЕРЕТЕ ЗА АКТУАЛИЗАЦИЯ работи:

Така че, ако T1 получи ексклузивно заключване на някои редове, T2 няма да може да прочете тези записи, докато T1 не се ангажира или върне обратно. Ако T2 използва READ_UNCOMMITTED ниво на изолация, тогава T2 никога няма да блокира записите за заключване, тъй като просто използва регистрационни файлове за отмяна, за да реконструира данни, сякаш е било, когато е започнала заявката. За разлика от стандарта SQL, Oracle READ_UNCOMMITTED ще:




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. актуализиране на колона с клеймо за време с клеймо, съдържащо „T“

  2. ORA-01097

  3. PL/SQL има ли еквивалентен StringTokenizer на Java?

  4. Инсталиране на Oracle 10 ODP.NET на Microsoft Windows 2008 Server 64bit

  5. Задайте време за изчакване на връзката с база данни на Oracle 10g в Java