Java Hibernate consultas HQL con nolock

Hay una manera para ejecutar estas consultas como si he añadido un (NOLOCK) sugerencia para ellos?

InformationsquelleAutor Sarit | 2010-08-17

3 Kommentare

  1. 8

    Si usted realmente necesita esto, entonces usted quiere hacer algo como:

    session.connection().setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);

    que es idéntica a la de un nolock.

    Antes de hacer eso, realmente pensar cuidadosamente si desea hacer una lectura. La mayoría de las personas hacen esto porque es lo que siempre han hecho, en lugar de porque es la cosa correcta de hacer. En particular, esto no funciona bien con el almacenamiento en caché.

    Realidad, este hilo entra en los temas un poco. Lea cuidadosamente antes de decidir.

    • Gracias, Gary. Sí, yo estaba buscando lecturas. Nuestro DBA han recomendado NOLOCK para todos», selecciona» en este área del proyecto. Problemas, parte de la SQLs fueron de hibernación.
    • En las últimas versiones de la Hibernación, la conexión() parece ser removido de la API. Cualquier idea sobre cómo efecto similar puede ser logrado sin la conexión del objeto?
    • Si utiliza el @Transactional-anotación, se puede especificar como la isolationde la propiedad.
    • Para ser claro, supongo que te refieres a la Primavera Transaccional de anotación, que no es parte de Hibernación.
  2. 7

    Con la última versión de Hibernación tienes 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);
                }
            });
    • He utilizado este método para establecer read_uncommitted niveles de aislamiento de transacción en determinadas consultas, pero me di cuenta de que la conexión de cantidad se aumentó varias veces más de la cantidad sin ella. Conexión de cantidad en nuestro servidor Websphere que tiene la aplicación fue de 4 para un usuario antes de read_uncommitted transacciones y después de que se convirtió en el 80. Es eso normal? O debo buscar algo más y en algún otro lugar para encontrar el problema?
  3. 2

    Usted puede hacer el «with (nolock)» si vas nativo. Esto es extremo, pero si la alternativa es cambiar el nivel de aislamiento de transacción, usted podría hacer esto.

    Observe que en 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();

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea