使用nolock进行Java Hibernate HQL查询

时间:2010-08-17 07:11:21

标签: java hibernate orm nolock

有没有办法运行这些查询,就好像我添加了一个(NOLOCK)提示一样?

3 个答案:

答案 0 :(得分:8)

如果你确实需要这个,那么你想做的事情如下:

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

与nolock相同。

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

实际上,this thread进入了一些问题。在决定之前仔细阅读。

答案 1 :(得分: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);
            }
        });

答案 2 :(得分:2)

你可以用(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();