JPA "обновить" запрос застрял и блокирует всю базу данных - PullRequest
0 голосов
/ 11 января 2019

У меня есть запрос на обновление, который иногда зависает и блокирует всю базу данных. Я должен попросить администратора базы данных убить запрос вручную всякий раз, когда это происходит. Статус запроса в БД "спит", как видно на следующем скриншоте.

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);
}

Я также попытался вставить блок "finally" с вызовом entityManager.close(). С момента вставки блока finally ошибка еще не произошла.

Но я не уверен, что это решено навсегда. Как мне убедиться, что запрос не застрянет и заблокировать базу данных?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...