Pregunta

¿Hay una forma de ejecutar estas consultas como si he añadido un toque (NOLOCK) a ellos?

¿Fue útil?

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();
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top