Ответ 1
Новые драйверы OJDBC более совместимы, а затем они где. Вы можете отключить это поведение для устаревшего кода:
-Doracle.jdbc.autoCommitSpecCompliant=false
Это опция JVM.
Я просто обновляю до нового драйвера jdbc от classes12.jar до ojdbc7.jar
Мое приложение бросило исключение, когда работало с ojdbc7.jar:
java.sql.SQLException: Could not commit with auto-commit set on
at oracle.jdbc.driver.PhysicalConnection.commit(PhysicalConnection.java:4443)
at oracle.jdbc.driver.PhysicalConnection.commit(PhysicalConnection.java:4490)
at oracle.jdbc.driver.T4CConnection.doSetAutoCommit(T4CConnection.java:943)
at oracle.jdbc.driver.PhysicalConnection.setAutoCommit(PhysicalConnection.java:4
Мое приложение все еще работает нормально с classes12.jar.
Я исследовал оракул:
Это исключение возникает для любого из следующих случаев:
Но я не мог найти ошибку в моем источнике. Пожалуйста, помогите мне объяснить больше об этой ошибке.
Новые драйверы OJDBC более совместимы, а затем они где. Вы можете отключить это поведение для устаревшего кода:
-Doracle.jdbc.autoCommitSpecCompliant=false
Это опция JVM.
Этот вид исключений возникает, когда будет использоваться драйвер JDBC Oracle (ojdbc6.jar) версии 12 или выше. Версия 12 и выше драйвера более строго, чем предыдущие версии драйверов.
Вы можете решить проблему, у вас есть несколько вариантов:
Переопределить поведение новой версии jar (ojdbc6.jar) с настройкой ниже аргументов JVM.
-Doracle.jdbc.autoCommitSpecCompliant = ложь
Пользователи IBM WAS, обратитесь эта ссылка:
Установите автоматическое завершение работы в Java/SQL:
Java:
conn.setAutoCommit(ложь);
Oracle:
НАСТРОЙКА АВТОКОММУНИЗАЦИИ
Мы являемся IBM WAS v9 с использованием ojbc6.jar. Приведенная выше конфигурация применяется к серверу APP, агенту узла и DMGR, затем она работает.
-Doracle.jdbc.autoCommitSpecCompliant=false
Dmgr: Диспетчер развертывания> Определение процесса> Виртуальная машина Java Изменить "Универсальные аргументы JVM"
NodeAgent: агенты Node> агент узла> определение процесса> виртуальная машина Java
WebSphere Application Server: серверы приложений> WebSphere_Portal> определение процесса> виртуальная машина Java изменяет "общие аргументы JVM"
PhysicalConnector.java в ojdbc6
public void commit(int paramInt) throws SQLException {
disallowGlobalTxnMode(114);
if (this.lifecycle != 1) {
SQLException sQLException = DatabaseError.createSqlException(getConnectionDuringExceptionHandling(), 8);
sQLException.fillInStackTrace();
throw sQLException;
}
.
.
PhysicalConnector.java в ojdbc7
public void commit(int paramInt) throws SQLException {
disallowGlobalTxnMode(114);
if (this.autoCommitSpecCompliant && getAutoCommit()) {
throw (SQLException)DatabaseError.createSqlException(getConnectionDuringExceptionHandling(), 273).fillInStackTrace();
}
if (this.lifecycle != 1) {
SQLException sQLException = DatabaseError.createSqlException(getConnectionDuringExceptionHandling(), 8);
sQLException.fillInStackTrace();
throw sQLException;
}
.
.
Мы можем видеть, что в ojdbc7 был введен некоторый фрагмент кода. Если autoCommitSpecCompliant
и getAutoCommit()
оба истинны, мы получим исключение.
установить false autoCommitSpecCompliant
Параметр ниже JVM должен быть установлен
-Doracle.jdbc.autoCommitSpecCompliant=false
вставьте ниже кусок кода перед connection.commit()
connection.setAutoCommit(false);
Изменение этого в свойствах Hibernate работало для меня
hibernate.connection.release_mode = авто