Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Java Hibernate HQL queries with nolock

Is there a way to run these queries as if I added a (NOLOCK) hint to them?

like image 812
Sarit Avatar asked Aug 17 '10 07:08

Sarit


2 Answers

You can do the "with (nolock)" if you go native. This is extreme but if the alternative is changing the transaction isolation level, you might rather do this.

Note that this example is for 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();
like image 126
Larry Avatar answered Oct 07 '22 01:10

Larry


If you really need this, then you want to do something like:

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

which is identical to a nolock.

Before you do that, really think carefully if you want to do a dirty read. Most of the time people do this because it's what they've always done, rather than because it's the right thing to do. In particular, this does not work well with caching.

Actually, this thread goes into the issues a little. Read carefully before deciding.

like image 35
GaryF Avatar answered Oct 07 '22 00:10

GaryF