Java Hibernate HQL Queries с Nolock
Вопрос
Есть ли способ запустить эти запросы, как будто я добавил (нолоцкий) подсказки к ним?
Решение
Если вам действительно нужно это, то вы хотите сделать что-то вроде:
session.connection().setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);
который идентичен нолоску.
Прежде чем сделать это, действительно думайте осторожно, если вы хотите сделать грязную читать. Большую часть времени люди делают это, потому что это то, что они всегда делали, а не потому, что это правильная вещь. В частности, это не работает хорошо с кэшированием.
На самом деле, эта нить входит в проблемы немного. Читайте внимательно до принятия решения.
Другие советы
В последней версии 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();