Hibernate API에는, true로 설정할 수있는 hibernate.connection.autocommit 속성이있다. (그것은 아닌 권장)Hibernate에서 "hibernate.connection.autocommit = true"가 권장되지 않는 이유는 무엇입니까?
는 JDBC 풀링 된 커넥션들에 대해 자동 커밋을 사용합니다 :
그러나 API에서
, 그들은 그렇게처럼 설정하지 않는 것이 좋습니다 언급했다.
왜 권장하지 않습니까? 이 속성을 true로 설정하면 좋지 않은 영향이 있습니까?
하이버 네이트 후드 JDBC를 사용한다. autoCommit은 "명령문 당 트랜잭션"을 의미하는 JDBCConnection의 개념입니다. 트랜잭션 범위 = 1 sql 문 [autocommit = true] hibernate.connection.autoCommit = true는 각 명령문이 완료되면 완료되게하므로 하나 이상의 작업 단위 (UOW)의 일부로 두 개 이상의 명령문을 커밋/롤백 할 수 없습니다. 우리는 모든 명령문을 실행하거나 실행하지 않으려 고합니다. 트랜잭션의 시작과 끝을 표시해야하고 autoCommit을 비활성화해야합니다. –
hibernate.connection.autocommit = 거짓 이 시나리오 명시 적 트랜잭션 경계 :. 는 SessionFactory.openSession() session.beginTransaction() session.getTransaction() (커밋) // 플러시 세션, TXN 세션을 커밋합니다. close()를 암시 적 트랜잭션 경계 는 SessionFactory.openSession() 때문에 //이 //하지만 암시 TXN를 더 트랜잭션 사용을 참조하십시오 없습니다 - 자동 커밋이 은 Session.flush() 은 session.close() 여기 거짓 - 세션을 닫을 때, 특정 atherion이 명확하지 않다 오라클의 vendor specific behavior - 모든 SQL 문이 커밋 됨 in postgresql - 모든 SQL 문이 롤백 됨 –