Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Блокировки MySql в Hibirnate / 6 сообщений из 6, страница 1 из 1
17.09.2012, 02:22:10
    #37959670
tepka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировки MySql в Hibirnate
Коллеги,
Хочется поставить блокировку на строчку в таблице(InnoDB) средствами Hibirnate, так чтобы никто даже не мог прочитать эту строчку.
Возможно ли это сделать или я чего то не понимаю?
Как делаю я, метода из DAO:
Код: java
1.
2.
3.
4.
5.
6.
7.
    
public ContentEntity getContentEntity() {
      return sessionFactory.getCurrentSession()
           .createCriteria(ContentEntity.class)
           .add(Restrictions.eq("id", 600000))
           .setLockMode(LockMode.PESSIMISTIC_WRITE)
           .uniqueResult();


}
Lock на строку ставится, т.е. писать в эту строку в новой сессии ничего не могу. Но не понятно, почему я все же могу читать эту строчку (открываю не зависимую сессию к базе и спокойно выполняю "SELECT * FROM `CONTENT` WHERE `id` = 600000")

PS. Дело в том, что я всю жизнь думал, что нельзя поставить такую блокировку на строку, чтобы даже читать нельзя было, но тут попалась статья про блокировки и у меня сложилось впечатление, что любой write lock в mysql "закрывает" даже чтение строки пока lock не будет снят.
Поясните пожалуйста, правильно ли я понимаю, что любой write lock закрывает строку/таблицу от чтения, и если я правильно понимаю что почему у меня не получается закрыть строку от чтения?
...
Рейтинг: 0 / 0
17.09.2012, 09:43:13
    #37959792
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировки MySql в Hibirnate
tepkaДело в том, что я всю жизнь думал, что нельзя поставить такую блокировку на строку
и правильно думал.
Где статья?
...
Рейтинг: 0 / 0
17.09.2012, 12:59:28
    #37960174
Лагман
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировки MySql в Hibirnate
Блокировка PESSIMISTIC_WRITE будет если другой процесс выполнит SELECT FOR UPDATE, на простой селект это не действует. Алсо не знаю, есть ли такой функционал в MySQL
...
Рейтинг: 0 / 0
17.09.2012, 13:19:37
    #37960220
tepka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировки MySql в Hibirnate
Petro123tepkaДело в том, что я всю жизнь думал, что нельзя поставить такую блокировку на строку
и правильно думал.
Где статья?
Например вот http://habrahabr.ru/post/46542/
"Если А хочет записать данные, то другие клиенты не должны ни читать ни писать эти данные пока А не закончит(write lock)."
...
Рейтинг: 0 / 0
17.09.2012, 13:26:37
    #37960237
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировки MySql в Hibirnate
tepkaНапример вот http://habrahabr.ru/post/46542/
"Если А хочет записать данные, то другие клиенты не должны ни читать ни писать эти данные пока А не закончит(write lock)."
Это блокировки разных уровней. Они друг с другом почти никак не связаны. Те что описаны в статье нужны RDBMS для реализаций траназакционности и ACID. Т.е. это механизм работы самой БД. Пользовтель этими блокировками напрямую не манипулирует. Только в сложных ситуациях тонкой оптимизации. И то не всегда это возможно.

А то что делает Hibernate это блокировки прикладного уровня, которыми может управлять пользователь для реализации необходимой ему логики.

В качестве теории можете почитать, чем, например, "версионники" отличаются от "блокировочников".
...
Рейтинг: 0 / 0
17.09.2012, 14:01:00
    #37960311
tepka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировки MySql в Hibirnate
понял, спасибо большое за разъяснение
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Блокировки MySql в Hibirnate / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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