Java Hibernate HQL查询Nolock
题
有没有办法运行这些查询,就好像我向它们添加了(nolock)提示一样?
解决方案
如果您真的需要这个,那么您想做类似的事情:
session.connection().setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);
这与Nolock相同。
在这样做之前,如果您想进行肮脏的阅读,请仔细考虑。大多数时候,人们这样做是因为这是他们一直做的事情,而不是因为这是正确的事情。特别是,这与缓存无法很好地工作。
实际上, 这个线程 稍微介入问题。在决定之前仔细阅读。
其他提示
在最新版本的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)”。这是极端的,但是如果替代方案正在改变交易隔离级别,则可以做到这一点。
请注意,此示例适用于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