2009-02-13 4 views
0

Existe-t-il un moyen de sélectionner et de choisir les mises à jour qu'Hibernate va effectuer avec une transaction? Inspiré par la volonté d'EBay d'être sans transaction autant que possible, je connais de nombreuses mises à jour dans mon application qui n'ont pas besoin d'être ACID écrit. Par exemple, il existe une mise à jour composée d'un ID utilisateur et d'un ID pour une autre table. Un seul utilisateur peut insérer cet enregistrement, et je sais qu'il n'a pas besoin d'être une transaction. Alors, comment désactiver les transactions pour cet insert, ou insère-t-il dans cette table?Opération sans transaction avec Hibernate

Edit:

Eh bien, étant donné que mon DB sous-jacente est mysql - il semble que je dois choisir sur une table par table. Toute table n'ayant pas besoin de transactions peut être configurée comme myisam au lieu de innodb. ah, eh bien, pas la réponse que je cherchais.

+0

https://www.hibernate.org/403.html – hakre

Répondre

1

Voir: Hibernate Tx Documentation

La réponse générale est que cela dépend comment vous appelez Mise en veille prolongée. Le document ci-dessus explique précisément comment vous contrôlez vos frontières transactionnelles via l'API Hibernate.

0

Je ne sais pas quoi que ce soit au sujet de Mise en veille prolongée, mais mes pensées sont:

Si vous ne BEGIN TRANSACTION Explicitement/COMMIT il fera des choses en son (sauf si vous avez des transactions implicites activées).

Si vous n'avez qu'un seul INSERT/UPDATE par page (unité de travail), alors cette page est intrinsèquement ACID, donc si vous démarrez et transaction explicite, ou non, n'est pas important. Cependant, une transaction implicite qui engloberait toute la transaction DB de la page garantirait que si vous ajoutiez quelque chose dans le futur, ayant oublié que la page ne possédait pas de Transaction implicite, vous vous épargneriez de vous-même!