0

중복 질문을 게시하고 있습니다. 나는 여러가지 게시물을 통해 SO와 다른 블로그에도 갔다.하지만 여기에 더 많은 아이템을 조금 더 명확하게 표현해야한다. &.봄 거래 또는 최대 절전 모드 트랜잭션

저는 Spring + Hibernate를 사용합니다. 나는 몇몇 'n'기록을 삽입하고있다.

MySpringController.java

@Transactional 
@RequestMapping(...) 
public String saveRecords(@ModelAttribute("orderObj") Order order){ 
    for(Item item : order.getItems()){ 
    itemDAO.save(item); 
    } 
    return "saveSuccess"; 
} 

MyHibernateDAO 클래스

public void save(Item item){ 
    session = sf.openSession(); 
    Transaction tx = session.beginTransaction(); 
    session.persist(item); 
    tx.commit(); 
    session.close(); 
} 

질문 : 봄과 최대 절전 모드 모두에서 사용할 수

  1. 있다 거래. 그렇게하는 것이 좋은 방법입니까? 또는 두 구성 요소의 트랜잭션이 모두 이면 충분합니까?

  2. 이러한 대량 트랜잭션 중에 session.openSession() 또는 session.getCurrentSession()을 사용하는 것이 좋습니다. 대량으로 제출할 때마다 매번 & 닫기 트랜잭션을 실행하는 것이 좋습니다?

  3. 이제 롤백이 발생하면 범위가 어떻게됩니까? Hibernate 나 Spring의 트랜잭션 하에서?

질문의 모든 비논리적 보일 수도 있지만, 나와 함께 베어 나는 어딘가 잘못이라면 나의 의심이 날 수정 & 명확히하십시오.

감사합니다,

답변

3

트랜잭션 관리의 사용이 응용 프로그램에 응용 프로그램에 따라 다릅니다하지만, 내 경험에 따라 몇 가지 중요한 일을 지적 할 수있다.

  1. 스프링과 하이버 네이트 모두 트랜잭션 API를 제공하지만, 모든 것을 처리 할 때 Spring 선언적 트랜잭션 관리를 사용하기 때문에 롤백과 커밋에 대해 걱정할 필요가 없습니다.
  2. session.getCurrentSession()을 사용하면 현재 스레드에 대한 세션을 반환하는 것이 더 좋습니다.
  3. 스프링 트랜잭션 관리를 사용하는 경우 롤백은 스프링 관리 트랜잭션 하에서 수행됩니다.

당신은 Hibernate와 Spring 트랜잭션을 둘 다 사용할 필요가 없다.

위의 내용은 본인의 경험을 기반으로 작성되었습니다. 요구 사항에 따라 다를 수 있습니다.

+0

그래, 그들은 이해가된다. 많은 블로그를 탐색하고 내 응용 프로그램에서 많은 테스트를 한 후에 더 많은 노출을 얻었습니다. 답변 해주셔서 감사합니다. :) – svjn