2011-01-07 5 views
0

I new to hibernateTransactions en veille prolongée

Dans mon projet, je dois gérer les transactions. Comment gérer les transactions déclaratives avec dans deux classes

Exemples:

//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); 

    } 
} 

Conformément au code ci-dessus est-il possible de traiter des transactions, de telle sorte que si l'insert dans CLASSA succès et l'insert dans le ClassB échoue, la transaction devrait rollback et supprimer l'enregistrement inséré dans le tableau A correspondant à la classe A

s'il vous plaît me aider en utilisant les transactions déclaratives ....

Merci dans adavace ....

Répondre

6

Hibernate comme toute autre chose prend en charge la transaction. Il vous suffit donc de renvoyer les appels à update() et save() dans une transaction.

Exemple:

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(); 
} 

Et vous obtenez votre souhait. Si quelque chose échoue entre beginTransaction() et commit(), tout est annulé.

Vous avez peut-être des questions sur la gestion de session, mais c'est une question différente.

+0

Merci Milenkoski, j'essaie d'utiliser transacrtion déclarative, alors pourriez-vous m'aider s'il vous plaît de cette façon – kumar1425

+0

Aucune différence. Lorsque vous annotez une méthode @Transaction, elle encapsule la méthode entière dans une transaction. Donc, moins coolplate ... –

+0

Mikenkiski, pourriez-vous s'il vous plaît m'aider avec un exemple, j'ai essayé d'emballage de la méthode avec l'annotation de transaction, mais pas d'utilisation. L'enregistrement est en cours d'insertion lorsque la deuxième insertion a échoué – kumar1425