Ява гибернации бумага HQL запросы с nolock
есть ли способ запустить эти запросы, как если бы я добавил к ним подсказку (NOLOCK)?
3 ответов
Если вам это действительно нужно, то вы хотите сделать что-то вроде:
session.connection().setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);
который идентичен nolock.
прежде, чем вы сделаете это, действительно подумать, если вы хотите сделать грязное чтение. В большинстве случаев люди делают это потому, что это то, что они всегда делали, а не потому, что это правильно. В частности, это не работает хорошо с кэшированием.
на самом деле этой теме немного углубляется в проблемы. Внимательно прочитать прежде чем принять решение.
в последней версии Hibernate вы должны сделать это следующим образом:
Session session = (Session) em.getDelegate();
session.doWork(new Work() {
@Override
public void execute(Connection connection) throws SQLException {
connection.setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);
}
});
вы можете сделать "с (nolock)", если вы идете родной. Это экстремально, но если альтернативой является изменение уровня изоляции транзакций,вы можете сделать это.
обратите внимание, что этот пример для MSSQL.
String sqlQueryString = "SELECT * FROM my_classes_table WITH (nolock) WHERE columnName = :columnValue";
SQLQuery sqlQuery= session.createSQLQuery(sqlQueryString).addEntity(MyClass.class);
sqlQuery.setLong("columnValue", value);
List<MyClass> out = sqlQuery.list();