powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Может ли Hibernate заблокировать ряд даже на чтение?
5 сообщений из 5, страница 1 из 1
Может ли Hibernate заблокировать ряд даже на чтение?
    #38708638
Dymytry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
День добрый, уважаемые!

Копаюсь в Хибернейте потихоньку. Имею Hibernate 3.6 + MySQL (isolation level=repeatable_read). Хочу понять как работает локинг и вообще зачем его использовать. Имею такой код:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
package hibernate;
import java.util.*;
import org.hibernate.*;
public class HibernateGames {
    public static void main(String[] args) {

        //main transaction
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = session.beginTransaction();
        Message loaded = (Message) session.get(Message.class, 21l);
        session.lock(loaded, LockMode.PESSIMISTIC_WRITE);

        //concurrent transaction
        Session session2 = HibernateUtil.getSessionFactory().openSession();
        Transaction tx2 = session2.beginTransaction();
        Message loaded2 = (Message) session2.get(Message.class, 21l);
        tx2.commit();
        session2.close();

        //main transaction committed
        Message loadedAtLast = (Message) session.get(Message.class, 21l);
        tx.commit();
        session.close();

        HibernateUtil.shutdown():
    }
}



Вопросы:

1) Насколько я понимаю, в БД есть 2 типа замков: exclusive и shared. Первый ставиться через select.. update , второй - select .. lock in share mode или что-то подобное. Exclusive Lock запрещает все операции с рядом, тогда как Shared Lock позволяет читать и навешивать другие Shared Locks. Правильно ли я понимаю?

2) Зависит ли описанное в п.1. от уровня изоляции?

3) Приведенный мною код не блокирует вторую (concurrent) транзакцию от чтения. Только от записи. Почему? Можно ли вообще заблокировать ряд на запись, кроме как включив isolation_level = synchronized?
...
Рейтинг: 0 / 0
Может ли Hibernate заблокировать ряд даже на чтение?
    #38708769
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dymytry,
все типы блокировок практически не используют с хибером и веб проектом
- если поставить умолчательный уровень изоляции БД и не насиловать её, то и вторая блокировка не понадобится. Т.к. до коммита только ты будешь видеть свои записи.
"попробуй ничего не делать без нужды" (с)
imho
...
Рейтинг: 0 / 0
Может ли Hibernate заблокировать ряд даже на чтение?
    #38708771
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dymytry,

Указаные вопросы к Hibernate отношения не имеют. Hibernate лишь транслирует вызовы API в SQL. Ваши вопросы относятся к работе RDBMS. Разобраться в них лучше всего по мануалам конкретной RDBMS. Либо спросить на соответствующем форуме.
...
Рейтинг: 0 / 0
Может ли Hibernate заблокировать ряд даже на чтение?
    #38709069
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dymytry, почитай доки по MySQL и ключевые слова repeatable_read
...
Рейтинг: 0 / 0
Может ли Hibernate заблокировать ряд даже на чтение?
    #38709628
Dymytry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Благодарю за ответы! Действительно, логичнее спросить это на форуме БД. Так и сделал.

mayton,
я понимаю что такое уровни изоляции в общих чертах. Сейчас пытаюсь понять как работают блокировки.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Может ли Hibernate заблокировать ряд даже на чтение?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]