Frage

Gibt es eine Möglichkeit, diese Abfragen auszuführen, als ob ich einen (NOLOCK) Hinweis zu ihnen hinzugefügt?

War es hilfreich?

Lösung

Wenn Sie das wirklich brauchen, dann wollen Sie etwas tun:

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

, die zu einem nolock identisch ist.

Bevor Sie das tun, denken wirklich vorsichtig, wenn Sie ein Dirty Read tun wollen. Die meisten der Zeit, die Menschen tun dies, weil es ist, was sie immer getan haben, nicht weil es ist das Richtige zu tun. Insbesondere funktioniert das nicht gut mit Caching.

Eigentlich dieses Themas geht in die Themen ein wenig. Lesen Sie sorgfältig vor der Entscheidung.

Andere Tipps

neueste Version von Hibernate Sie haben es auf diese Weise zu tun:

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

können Sie tun, um den „mit (nolock)“ wenn Sie einem neueren gehen. Diese extrem ist, aber wenn die Alternative ist die Transaktionsisolationsstufe zu ändern, könnte man eher das tun.

Beachten Sie, dass dieses Beispiel für 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();
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top