Domanda

C'è un modo per eseguire queste query come se ho aggiunto un (NOLOCK) suggerimento per loro?

È stato utile?

Soluzione

Se si ha realmente bisogno di questo, allora si vuole fare qualcosa di simile:

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

che è identico a un nolock.

Prima di farlo, davvero che attentamente se si vuole fare una lettura sporca. La maggior parte delle volte le persone fanno questo perché è quello che hanno sempre fatto, piuttosto che perché è la cosa giusta da fare. In particolare, questo non funziona bene con la cache.

In realtà, questa discussione va nelle questioni un po '. Leggere attentamente prima di decidere.

Altri suggerimenti

Nella versione più recente di Hibernate che devi fare in questo modo:

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

Si può fare il "con (nolock)" se si va nativo. Questo è estremo, ma se l'alternativa sta cambiando il livello di isolamento delle transazioni, si potrebbe invece fare questo.

Si noti che questo esempio è per 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();
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top