Spring Framework 3 및 Hibernate 3.6을 사용하는 웹 애플리케이션에서 작업하고 있으며 트랜잭션 관리가 어떻게 작동하는지 이해하려고 노력합니다. InnoDB 테이블과 함께 mySQL Server 5.1을 사용합니다. 나는 평범한 Hibernate 3 API를 기반으로 DAO를 작성했다.Spring, Hibernate 및 mySQL을 이용한 트랜잭션 관리
1) mySQL 서버 자체에서 트랜잭션 처리 방법을 지정 했습니까? 즉, 언제 레코드를 잠글 필요가 있는지 여부를 결정합니다.
2) 나는 datarecords 트랜잭션 동안 잠겨있는 경우는 true) 또는 @Transactional @Transactional (읽기 전용 =이 (읽기 전용 = false)를이 영향을 미치지 않는 한 봄의 메소드를 선언? 즉, readOnly = true이면 데이터 코드가 잠기지 않고 readOnly = false 일 때 사용 된 모든 데이터 코드가 잠겨 있습니까?
3) readOnly = true가되어 다양한 데이터 레코드를 읽으면 어떻게됩니까? 읽는 중간에 다른 트랜잭션에 의해 변경된 것으로 가정하여 오래된 레코드와 새로운 레코드를 얻습니다. 그게 가능하니?
4) 커밋은 언제 발생합니까? 트랜잭션이 성공한 후 또는 세션이 닫힌 후?
5) 최대 절전 모드 세션은 언제 시작합니까? 각 세션 (서버와 클라이언트 간) 또는 각 트랜잭션마다?
6) 누가 결국 거래 관리 책임이 있습니까? 봄 또는 MySQL 또는 둘 다?
답변 해 주셔서 감사합니다. :-)
감사합니다. :-) 레코드를 잠그는 것은 mySQL의 책임이며 데이터 레코드를 읽는 것은 잠금을 유발하지 않는다? "readOnly"가 트랜잭션과 아무 관계가 없다고하더라도이 트랜잭션 동안 데이터 읽기가 잠기지 않는다는 것은 독서가 잠금을 유발하지 않기 때문에? – nano7
@ nano7 : 잠금과 같은 구현 세부 사항은 데이터베이스 엔진에 따라 다르며 InnoDB가 어떻게 처리하는지 잘 모르겠습니다. – axtavt
오케이, 고마워요! :-) – nano7