JPA“更新”查询卡住并锁定所有数据库

时间:2019-01-11 11:41:37

标签: java sql-server hibernate-jpa

我有一个更新查询,有时会卡住并锁定整个数据库。每当发生这种情况时,我都必须要求DBA手动终止该查询。如下面的屏幕截图所示,数据库中查询的状态为“正在休眠”。

https://imgur.com/a/fFN6rlJ

我正在使用MS SQL 2012 Server和hibernate-core 5.2.6-Final。

我尝试实现查询超时,但是没有成功。即使发生超时,查询也再次被卡住。我粘贴了执行以下更新的代码段:

try {
    if (!entityManager.getTransaction().isActive()) {
        entityManager.getTransaction().begin();
    }
    String query = "UPDATE FooBarTable i SET i.foo = :foo"
                + "WHERE i.id.bar = :bar AND i.id.foobar = :foobar";
    entityManager.createQuery(query)
            .setParameter("foo", foo)
            .setParameter("bar", bar)
            .setParameter("foobar", foobar)
            .setHint("org.hibernate.timeout", "15")
            .executeUpdate();
    entityManager.getTransaction().commit();

} catch (Exception e) {
    entityManager.getTransaction().rollback();
    throw new Exception(e);
}

我也尝试过插入带有entityManager.close()的“ finally”块。自从插入finally块以来,该错误尚未发生。

但是我不确定它能否永久解决。如何确保查询不会卡住并锁定数据库?

0 个答案:

没有答案