Есть два тестовых метода:
@GetMapping("/test1")
@Transactional
public void test1() throws InterruptedException {
Session session = em.unwrap(Session.class);
Test test = session.get(Test.class, 1l);
test.setBalance(100);
session.update(test);
Thread.sleep(15000);
}
@GetMapping("/test2")
@Transactional
public void test2() {
Session session = em.unwrap(Session.class);
Test test = session.get(Test.class, 1l);
session.delete(test);
}
Первым вызывается test1(). В текущей транзакции с уровнем изоляции READ_COMMITED также выполняется update, а далее - Thread.sleep(15000). Транзакция не подтверждена. Потом вызывается метод test2(), который при delete() должен ЖДАТЬ, пока предыдущая транзакция будет подтверждена, но вместо этого, она успешно выполняется. Почему? Почитал документацию про уровни в PostgreSQL. Там вроде четко написано, что операция блокируется на определенной строчке, пока предыдущая транзакция не будет подтверждена, а в итоге получается, что ничего не блокируется. Пример абстрактный, чтобы разобраться
Продвижение своими сайтами как стратегия роста и независимости