Я пытаюсь обновить нашу базу кода от Hibernate 3.6 до 4.0 (как первый шаг к тому, чтобы получить нас более актуальными). Я сталкиваюсь с проблемой, когда COMMIT не выдается, даже если мы вызываем commit(), после того, как транзакция isActive().Обновление Hibernate 4, COMMIT не выпущен
При выполнении некоторых запросов успешно к базе данных Postgres, я вижу это в журналах Postgres:
2014-12-30 20:09:39 CST LOG: execute <unnamed>: SET extra_float_digits=3
2014-12-30 20:09:39 CST LOG: execute S_1: BEGIN
2014-12-30 20:09:39 CST LOG: execute <unnamed>: -- This script........
Обратите внимание на НАЧАТЬ там, а потом вот пример простого совершения звонка:
if (sf.getCurrentSession().getTransaction().isActive()) {
sf.getCurrentSession().getTransaction().commit();
}
Я отлаживал в AbstractTransactionImpl и смотрю на метод commit() Jdbc4Connection и вижу, что фактический вызов COMMIT пропускается ..... но я не знаю почему. Вот инструкция if, в которой это происходит (это в AbstractJdbc2Connection).
if (protoConnection.getTransactionState() != ProtocolConnection.TRANSACTION_IDLE)
executeTransactionCommand(commitQuery);
Таким образом, очевидно, что наше транзакционное состояние == ProtocolConnection.TRANSACTION_IDLE. Однако я не совсем уверен, что это значит, и почему мы получаем эту проблему, когда транзакция говорит, что это isActive()?
ПРИМЕЧАНИЕ: этот точный точный код работал для нас на Hibernate 3.6.
Спасибо.
UPDATE: Я отлажена дальше, и, похоже, есть много объектов, ProtocoalConnectionImpl строящиеся, значит ли это указывает на проблему на нашей программной стороне, что делает что-то он не должен? Как это указывает на то, что мы открываем соединения, которые просто висят вокруг? Спасибо за более глубокое понимание.