Hibernate и уровни изоляциии транзакций

178
13 января 2021, 15:40

Есть два тестовых метода:

@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. Там вроде четко написано, что операция блокируется на определенной строчке, пока предыдущая транзакция не будет подтверждена, а в итоге получается, что ничего не блокируется. Пример абстрактный, чтобы разобраться

READ ALSO
Не могу получить доступ к файлу. Android Studio

Не могу получить доступ к файлу. Android Studio

Я получаю путь к файлу, сохраняю в переменную(Путь корректный, я проверял)

182
Правильное объявление коллекций

Правильное объявление коллекций

Почему для этих реализаций пишут вот так, а не вот так:

180
Ошибка startForeground в Android 8.1

Ошибка startForeground в Android 8.1

Вот такая проблема: показывается список песен - нажимаю на на любую, для воспроизведения, показывает ошибку androidapp

153
Выдвигающаяся панель сбоку

Выдвигающаяся панель сбоку

Цель: Осуществить в приложении возможность выдвигать панель сбоку

182