난 그냥 내 JPA 2.0 연구를 시작하고, 나는이 코드 조각이 :JPA 2.0의 세션과 트랜잭션의 차이점은 무엇입니까?
em = SessionFactory.startSession();
tx = em.getTransaction();
내 문제 : 나는 completly 세션의 사용 및 사용의 차이를 이해한다면 잘 모르겠어요를 거래. 몇 줄에서 누구나 그들 사이의 가장 큰 차이점을 말해 줄 수 있습니까? 감사 !
난 그냥 내 JPA 2.0 연구를 시작하고, 나는이 코드 조각이 :JPA 2.0의 세션과 트랜잭션의 차이점은 무엇입니까?
em = SessionFactory.startSession();
tx = em.getTransaction();
내 문제 : 나는 completly 세션의 사용 및 사용의 차이를 이해한다면 잘 모르겠어요를 거래. 몇 줄에서 누구나 그들 사이의 가장 큰 차이점을 말해 줄 수 있습니까? 감사 !
귀하는 은행에 가서 2 개의 수표를 입금하고 약간의 금액을 인출하십시오.
그래서 당신은 창구가 열릴 때까지 줄을 서십시오.
첫 입금. 두 번째. 그러면 철수하게됩니다.
이제 끝났습니다. 계좌를 종료합니다.
출납원에게가는 것은 세션을 만드는 것과 같습니다. 이제 은행에있어 일할 준비가되었습니다.
각 입금 및 인출은 자체 소유의 일련의 작업이며, 이는 귀하의 거래입니다.
작업을 끝내고 나가면 세션을 닫거나 버립니다.
본질적으로 세션에는 거래가 포함되어 있으므로 은행에 갈 수 없다면 은행 예금을 할 수 없습니까?
세션은 데이터베이스와 상호 작용할 때 사용하는 세션입니다.
트랜잭션은 세션이 작동하는 경계를 지정하는 데 사용됩니다.
기본적으로 트랜잭션은 한 번에 세션과의 상호 작용 만 허용하여 데이터베이스가 손상되는 것을 방지합니다. (데이터베이스에서 많은 트랜잭션을 읽을 수 있기 때문에 조금 복잡해 지지만 쓰고있는 트랜잭션은 하나뿐입니다.)
em = SessionFactory.startSession();
JPA에는 세션이없고 SessionFactory도 없습니다. SessionFactory는 JPA를 사용할 경우 (Hibernate의 자체 API를 사용하거나 JPA 제공자로 Hibernate를 사용하지만 둘 다 사용하지 않는 경우) 사용해서는 안되는 최대 절전 모드 인터페이스입니다.
JPA 제공자로 최대 절전 모드로 전환했습니다. 그래서, 내가 말한 것은 ".. JPA 2.0"대신 ".. in hibernate"라는 제목을 작성 했어야한다는 것입니다. –
최대 절전 모드에서는 트랜잭션 관리가 매우 표준적이고 Hibernate에 의해 던져진 예외는 FATAL이라는 것을 기억하라. 트랜잭션을 롤백하고 현재 세션을 즉시 닫아야한다.
Session session = null;
Transaction tx = null;
try{
session = HibernateUtil.getSessionFactory().openSession();
tx = session.beginTransaction();
tx.setTimeout(5);
//doSomething(session);
tx.commit();
}catch(RuntimeException e){
try{
tx.rollback();
}catch(RuntimeException rbe){
log.error("Couldn’t roll back transaction", rbe);
}
throw e;
}finally{
if(session!=null){
session.close();
}
}
@ 데이비드 감사, 그것은 내가 사람들에게 웹 세션 요청/응답 관계를 설명하는 방법도있다 :
다음은 하이버 네이트 트랜잭션 템플릿입니다. – asawyer
완전성을 위해 단일 거래 내에서 여러 세션을 보유 할 수 있습니까? 식당에서 계산서를 지불해야합니다. 현금이 충분하지 않기 때문에 반값을 지불하고 현금 인출기에 가서 돈을 더 벌고 나머지는 내고 거래가 완료됩니다. 2 회의 세션, 하나의 거래. 이것이 가능한가? – rghome
@asawyer : 그러면 작업을 어떻게 구성할까요? 작업이 트랜잭션과 다른 점은 무엇입니까? –