使用nolock进行Java Hibernate HQL查询

有没有办法运行这些查询,好像我添加了一个(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); } }); 

如果你去当地,你可以做“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 out = sqlQuery.list();