Spring과 Hibernate의 통합 사무 관리에 대한 이해

Spring 사무 관리를 이야기하기 전에 우리가 Spring을 사용하지 않을 때 Hibernate에서 데이터 조작을 어떻게 하는지 생각해 봅시다.Hibernate에서 우리가 매번 조작을 할 때마다 우리는 먼저 사무를 열고 데이터 조작을 한 다음에 사무를 제출하고 닫아야 한다. 우리가 이렇게 하는 이유는 Hibernate의 기본 사무 자동 제출은false이기 때문이다. 그는 우리 사람이 수동으로 사무를 제출해야 하기 때문이다. 만약에 매번 수동으로 사무를 제출하고 싶지 않다면 당신은 Hibernate에 제출할 수 있다.cfg.xml 내 파일에서 그것을 사무 자동 제출로 설정합니다.
xml 코드

 <property name="defaultAutoCommit"> 
   <value>false</value> 
 </property> 
 

설령 우리가 그것의 사무 제출 방식을 자동으로 설정한다 하더라도 데이터 조작을 할 수 있다. 그러나 이렇게 하면 우리의 실제 업무 수요를 만족시키지 못한다. 왜냐하면 때때로 내가 한 데이터를 저장한 후에 나는 그가 다른 데이터를 계속 저장할 수 있기를 바란다. 나는 두 개 또는 여러 개를 저장한 후에 함께 사무 제출을 하고 싶다. 그러면 오류가 발생하더라도 우리는 굴러가서 데이터의 일치성을 확보할 수 있다.모두 성공하든지 실패하든지 간에 이때 우리는 한 개의 데이터를 저장한 후에 업무가 자동으로 제출될 수 없다. 왜냐하면 그들은 같은 업무에 있지 않기 때문에 우리는 데이터의 일치행을 보장할 수 없다.그래서 이때 우리는 수동으로 우리의 업무를 설정해야 한다. 이것은 스프링이 Hibernate에 제공하는 사무 관리 메커니즘을 사용해야 한다. 스프링이 제공하는 사무 관리는 두 가지로 나눌 수 있다. 프로그래밍식과 성명식, 프로그래밍식은 코드에서 제어하는 것이다. 예를 들어 Hibernate가 데이터를 조작하는 것처럼 사무를 열고 사무를 제출하는 방식은 한계가 있다.그래서 우리는 일반적으로 성명식으로 우리의 업무를 배치한다.
선언식 트랜잭션 구성은 다음 단계로 구성됩니다.
1. 선언식 트랜잭션 구성
(1) 사무 관리자 설정;
(2) 사무의 전파 특성;
(3) 그런 방법들은 업무를 사용한다.

<!--    sessionFactory Spring  --> 
 
  <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> 
  <property name="sessionFactory"> 
      <ref bean="sessionFactory"/> 
  </property> 
  </bean> 
 
<!--   --> 
  <tx:advice id="txAdvice" transaction-manager="transactionManager"> 
  <tx:attributes> 
  <tx:method name="save*" propagation="REQUIRED"/> 
  <tx:method name="delete*" propagation="REQUIRED"/> 
  <tx:method name="update*" propagation="REQUIRED"/> 
  <tx:method name="get*" read-only="true" propagation="NOT_SUPPORTED"/> 
  <tx:method name="*" read-only="true"/> 
  </tx:attributes> 
  </tx:advice> 
 
<!--   --> 
  <aop:config> 
  <aop:pointcut id="allServiceMethod" expression="execution(* com.coe.service.*.*(..))"/> 
  <aop:advisor pointcut-ref="allServiceMethod" advice-ref="txAdvice"/> 
  </aop:config>
우리가 사무를 설정할 때, 우리는 일반적으로 사무 경계를 서비스층, 즉 당신의 업무 논리층에 설정합니다. 왜냐하면 우리는 우리의 업무 논리층에서 우리의 일부 열의 데이터 조작을 완성할 때가 많기 때문입니다. 만약에 Dao 데이터층에 놓으면 그 입도가 너무 작습니다.또한 만약에 우리가 업무를 업무 논리층에 배치한다면 우리의 2급 캐시에도 좋은 점이 있을 것이다. 이것은 여러분이 나중에 실제 조작할 때 발견할 것이다.
2. 업무 논리 작성 방법
이때 우리는 우리의 업무 논리층에서 HibernateTemplate에서 제공한 데이터 조작 방법으로 우리의 업무 논리 방법을 작성할 수 있다. 물론 우리의 방법은 우리의 업무 설정에 설정된 것처럼save,delete,update,get으로 우리의 방법의 시작을 해야 한다.기본적으로 런타임 예외 클래스가 상속된 경우를 포함하여 런타임 예외가 롤백되며 일반 예외는 롤백되지 않습니다.
마지막으로 우리는 업무의 몇 가지 전파 특성을 정리했다.
1. PROPAGATION_REQUIRED: 트랜잭션이 있는 경우 현재 트랜잭션을 지원합니다.사무가 없으면 열기;
2. PROPAGATION_지원: 트랜잭션이 있는 경우 현재 트랜잭션을 지원합니다.만약 사무가 없다면 비사무의 집행;
3. PROPAGATION_MANDATORY: 트랜잭션이 이미 있는 경우 현재 트랜잭션을 지원합니다.만약 활동할 일이 하나도 없다면, 이상을 던진다.
4. PROPAGATION_REQUIRES_NEW:항상 새로운 일을 시작합니다.만약 하나의 업무가 이미 존재한다면, 이 존재하는 업무를 중단합니다.
5. PROPAGATION_NOT_Supported: 항상 비사무적으로 실행되며 존재하는 모든 사무를 중단합니다.
6. PROPAGATION_NEVER: 항상 비사무적으로 실행됩니다. 만약에 활동 사무가 있으면 이상을 던집니다.
7. PROPAGATION_NESTED: 활성 트랜잭션이 있으면 중첩된 트랜잭션에서 실행됩니다.활성 트랜잭션이 없으면 TransactionDefinition 키를 누릅니다.PROPAGATION_REQUIRED 속성이 실행됩니다.
본고를 통해 스프링과 Hibernate의 통합 사무 관리에 대한 이해를 도울 수 있기를 바랍니다. 본 사이트에 대한 지지에 감사드립니다!

좋은 웹페이지 즐겨찾기