Java Hibernate HQL interrogaciones para nolock
Pregunta
¿Hay una forma de ejecutar estas consultas como si he añadido un toque (NOLOCK) a ellos?
Solución
Si realmente necesita esto, entonces usted quiere hacer algo como:
session.connection().setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);
que es idéntica a una nolock.
Antes de hacer esto, realmente pensar cuidadosamente si usted quiere hacer una lectura sucia. La mayoría de las veces la gente hace esto porque es lo que siempre han hecho, más que porque es lo que hay que hacer. En particular, esto no funciona bien con el almacenamiento en caché.
En realidad, este hilo entra en los temas un poco. Lea cuidadosamente antes de decidir.
Otros consejos
En la última versión de Hibernate tiene que hacerlo de esta manera:
Session session = (Session) em.getDelegate();
session.doWork(new Work() {
@Override
public void execute(Connection connection) throws SQLException {
connection.setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);
}
});
Se puede hacer el "con (nolock)" si vas nativa. Esto es extremo, pero si la alternativa es cambiar el nivel de aislamiento, es posible que en lugar de hacer esto.
Tenga en cuenta que este ejemplo es para 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();