11

有没有办法像我向它们添加(NOLOCK)提示一样运行这些查询?

4

3 回答 3

9

如果你真的需要这个,那么你想做这样的事情:

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

这与 nolock 相同。

在您这样做之前,请仔细考虑是否要进行脏读。大多数时候人们这样做是因为这是他们一直在做的事情,而不是因为这是正确的做法。特别是,这不适用于缓存。

实际上,这个线程进入了一些问题。在决定之前仔细阅读。

于 2010-08-17T12:56:43.603 回答
7

在最新版本的 Hibernate 中,您必须这样做:

  Session session = (Session) em.getDelegate();
        session.doWork(new Work() {
            @Override
            public void execute(Connection connection) throws SQLException {
                connection.setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);
            }
        });
于 2014-01-21T15:24:38.043 回答
3

如果你是原生的,你可以做“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();
于 2015-10-22T16:17:56.180 回答