Hibernate 4 persistindo sem Transaction

Bom dia,

estou começando a utlizar o Hibernate 4, eu uso ele com o ServletFilter para abrir Sessions, porém as transactions precisam ser aberta manualmente.

o problema é que se o programador esquecer de abrir uma transação e chamar o SaveOrUpdate o Hibernate não salva a entidade mas também não da erro.

Existe alguma forma de forçar o hibernate a lançar exception quando chamar o (Save, Update ou Delete) sem uma transação aberta (me parece que no Hibernate3 era assim não era?)?
Ou então no meu filtro na hora de fechar a sessao eu lançar essa exception, tem alguma maneira de fazer isso? eu tentei pelo método session.isDirty(), mas não funcionou pois se o DAO chamar session.flush() mesmo sem transaction o dirty retorna false.

você não poderia criar uma TrasactionInterceptor, para cada requisição criar abir uma transaction?
ai caso ocorra um erro em algum processo você da um rollback em todas as operações…

Carlos, eu queria evitar abrir uma transação para cada requisição, mas to achando que essa vai ser a solução

ainda mais no caso que você disse, evitaria esse problema de “esquecer” de abrir a transaction, e alem do mais apenas seria feito manualmente em situações especificas.

q tipo de aplicação estás utilizando, web ou desktop?

Aplicação WEB com VRaptor…

Quem abre a session é um interceptor do vraptor e a coloca num ThreadLocal

Mas pra transação eu criei uma Annotation @Transaction, e criei um outro interceptor do VRaptor pra abrir e commitar a transação, mas se o programador esquece de colocar @Transaction em cima do método ai o Hibernate não executa no banco os updates mas também não da erro.

Por enquanto minha solução (muito feia) vai ser no HibernateUtils ao invés de retornar uma Session do Hibernate eu vou retornar uma classe Wrapper com a Session dentro, e na chamada de qualquer método que executa Updates no banco eu vou validar se tem transação aberta manualmente.