2011-01-07 2 views
0

새로운 최대 절전 모드로 전환최대 절전 모드에서의 트랜잭션

프로젝트에서 트랜잭션을 처리해야합니다. 두 클래스

예에서와 선언적 트랜잭션을 처리하는 방법 : 트랜잭션을 처리 할 가능성이있는 방법으로,이 위의 코드 당으로

//class 1 
class A{ 

    createA() 
    { 
    insert(A); 
    } 
} 

//class 2 
class B 
{ 
    createB() 
    { 
    insert(B); 
    } 
} 

//class 3 
@Transaction(Exception.class) 

class C 
{ 

    test() 
    { 

    create(A); 

    create(B); 

    } 
} 

하는 경우를 ClassA의 성공과 삽입에 삽입 ClassB가 다음 실패에 트랜잭션이 롤백과 클래스에 해당하는 테이블에 삽입 된 레코드를 제거해야

....이 사용하는 선언적인 트랜잭션 저를 도와주세요

adavace 덕분에 ....

답변

6

다른 어떤 것과 마찬가지로 트랜잭션을 지원합니다. 따라서 트랜잭션에서 update() 및 save() 호출을 래핑해야합니다.

예 :

Session sess = factory.openSession(); 
Transaction tx = null; 
try { 
    tx = sess.beginTransaction(); 

    // your updates to the database 
    create(A); 
    create(B); 


    tx.commit(); 
} 
catch (RuntimeException e) { 
    if (tx != null) tx.rollback(); 
    throw e; // or display error message 
} 
finally { 
    sess.close(); 
} 

그리고 당신은 당신의 소원을 얻을. beginTransaction()과 commit() 사이에 아무 것도 실패하면 모든 것이 롤백됩니다.

세션 처리에 대한 질문이있을 수 있지만 이는 다른 질문입니다.

+0

감사합니다. Milenkoski, iam 선언적 transacrtion을 사용하려고 했으니 까, 그런 식으로 도와주세요. – kumar1425

+0

차이가 없습니다. @Transaction 메서드에 주석을 달면 트랜잭션에서 전체 메서드를 래핑합니다. 그럼 덜 상용구 ... –

+0

Mikenkiski, 당신은 제발 도와 주실 수 있습니다, 나는 트랜잭션 주석과 방법을 래핑 해 보았지만 사용하지 못했습니다. 두 번째 삽입이 실패한 경우 레코드가 삽입 중임 – kumar1425

관련 문제