有没有办法运行这些查询,就好像我向它们添加了(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();
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top