2013-04-04 10 views
9

È davvero necessario avviare una transazione quando si sta per eseguire solo una query, senza eliminare o aggiornare i dati?BeginTransaction Hibernate necessario?

Attualmente sto usando Hibernate 4.1.9 con c3p0

Esempio,

session session = hibernateutil.getsessionfactory().opensession(); 
Transaction tx = session.beginTransaction(); 
List messages = session.createQuery("from Message m order by m.text asc").list(); 
tx.commit(); 
session.close(); 

riguarda

risposta

8

The documentation dice:

database, o un sistema, i confini di transazione sono sempre necessario. Nessuna comunicazione con il database può avvenire al di fuori di una transazione di database (questo sembra confondere molti sviluppatori che sono abituati alla modalità di auto-commit). Utilizzare sempre i limiti della transazione, anche per le operazioni di sola lettura. A seconda del livello di isolamento e delle capacità del database, questo potrebbe non essere richiesto, ma non esiste uno svantaggio se si demarcano le transazioni in modo esplicito. Certamente, una singola transazione di database avrà prestazioni migliori rispetto a molte piccole transazioni, anche per la lettura dei dati.

(enfasi miniera)