Question

Y at-il un moyen d'exécuter ces requêtes comme si j'ajouté un (NOLOCK) allusion à eux?

Était-ce utile?

La solution

Si vous avez vraiment besoin de cela, alors vous voulez faire quelque chose comme:

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

qui est identique à un nolock.

Avant de faire cela, pensez vraiment bien si vous voulez faire une lecture sale. La plupart des gens de temps est-ce parce que c'est ce qu'ils ont toujours fait, plutôt que parce qu'il est la bonne chose à faire. En particulier, cela ne fonctionne pas bien avec la mise en cache.

En fait, ce fil va dans les questions un peu. Lisez attentivement avant de décider.

Autres conseils

Dans la dernière version de mise en veille prolongée, vous devez le faire de cette façon:

  Session session = (Session) em.getDelegate();
        session.doWork(new Work() {
            @Override
            public void execute(Connection connection) throws SQLException {
                connection.setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);
            }
        });

Vous pouvez faire le « avec (nolock) » si vous allez natif. Ceci est extrême mais si l'alternative est en train de changer le niveau d'isolation des transactions, vous pourriez plutôt le faire.

Notez que cet exemple est pour 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();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top