как установить запрос, который будет считан незафиксированный?

с в спящем режиме, как я могу установить запрос, который будет считан незафиксированный? Я не хочу, чтобы это было глобальной установкой, просто хотело сделать это на на основание запроса.

5
задан Bozho 6 January 2010 в 20:30
поделиться

4 ответа

Вы пробовали session.connection().setTransactionIsolation(...)?

P.S. Для современной СУБД на базе MVCC нет необходимости использовать "чтение без фиксации", чтобы избежать блокировок. В некоторых СУБД такой уровень изоляции даже не реализован.

2
ответ дан 14 December 2019 в 04:39
поделиться

Установите уровень изоляции транзакций:

session.connection().setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);
2
ответ дан 14 December 2019 в 04:39
поделиться

Сам Hibernate API не предоставляет возможности сделать это программно, о чем я знаю. В документах сказано, что вы можете указать уровень изоляции в качестве свойства конфигурации:

hibernate.connection.isolation - Setts уровень изоляции транзакций JDBC. Проверьте java.sql.Connection для смысловые значения

Но, конечно, это относится ко всей SessionFactory, а не только к конкретным запросам.

Соблазнительно обманывать базовый уровень изоляции java.sql.Connection, но я был бы очень осторожен в таких вещах, вы рискуете вступить в конфликт с собственными стратегиями блокировки hibernate, которые используют уровень изоляции JDBC, чтобы определить, какой уровень изоляции LockMode будет использоваться. Если вы измените это непосредственно на Connection, вы можете получить странные результаты. Конечно, у вас может не быть выбора, но будьте осторожны.

"Лучшим" решением будет использование Spring's Hibernate Transaction API, которое позволяет вам полностью, предсказуемым и надежным образом развязать семантику транзакций, такую как уровень изоляции от Hibernate API.

2
ответ дан 14 December 2019 в 04:39
поделиться

по умолчанию, выражения не фиксируются в спящем режиме до тех пор, пока вы не сделаете это явно (или соединение будет возвращено в пул и драйвер случайно не сделает фиксацию за вас, что не гарантируется). так что, похоже, он уже делает то, что вы хотите.

вы также можете просто откатить текущую транзакцию, если хотите аннулировать утверждения, сделанные с начала транзакции.

в mysql, вы можете сделать что-то вроде:

set session transaction isolation level read uncommitted

или использовать метод axtavt proposed,

call getTransactionIsolation() перед запросом, чтобы получить текущий режим, так что вы можете поставить его обратно после stmt, если захотите.

0
ответ дан 14 December 2019 в 04:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: