Java hibernate hql with nolockのクエリ
質問
これらのクエリを実行する方法はありますか?
解決
本当にこれが必要な場合は、次のようなことをしたいのです。
session.connection().setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);
これはノロックと同じです。
それを行う前に、汚い読みをしたい場合は本当に注意深く考えてください。ほとんどの場合、人々はこれを行います。なぜなら、それは彼らが常に行ってきたことだからです。特に、これはキャッシングではうまく機能しません。
実際、 このスレッド 少し問題になります。決定する前に注意深く読んでください。
他のヒント
Hibernateの最新バージョンでは、このようにしなければなりません。
Session session = (Session) em.getDelegate();
session.doWork(new Work() {
@Override
public void execute(Connection connection) throws SQLException {
connection.setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);
}
});
ネイティブになると「(nolock)with(nolock)」を行うことができます。これは極端ですが、代替案がトランザクション分離レベルを変更している場合、これを行うことができます。
この例は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();
所属していません StackOverflow