Erro transaction Hibernate

41 views
Skip to first unread message

Carlos Eduardo Serpa

unread,
Sep 9, 2010, 8:56:57 AM9/9/10
to jav...@googlegroups.com
Alguem pode me ajudar com esse erro ? em outro metodo funciona normamente...

Session session = HibernateUtil.getSession();
Dao<Person> daoPerson = new DaoImpl<Person>(session, Person.class);
Person person = new Person();
Transaction transaction;

try{
    transaction = session.beginTrannsaction();
    person.setName('Lisa');
    daoPerson.salvar(person);
    transaction.commit();
} catch (Exception e) {
      if(transaction != null && transaction.isActive())
         transaction.rollback();
     e.printStackTrace();
}       
 finally{           
      session.close();
 }

org.hibernate.TransactionException: Transaction not successfully started
    at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:100)
    at br.com.sgu.service.ConvenioCoelceService.importaArquivo(ConvenioCoelceService.java:941)
    at br.com.sgu.SGU.executeImportacao(SGU.java:30)
    at br.com.sgu.SGU.main(SGU.java:92)

--
My best regards
Carlos Eduardo Serpa de Sousa
Systems Analyst
Sun Certified Programmer for Java 2 Platform, Standard Edition 5.0 - SCJP

Walter Mourão

unread,
Sep 9, 2010, 9:04:59 AM9/9/10
to jav...@googlegroups.com
Oi Carlos, deve ter um 'caused by' mais embaixo nesse stack trace...
e esse código fica mais elegante se vc tratar a exceção da transação fora do tratamento do restante, pois evita esse "if(transaction != null && transaction.isActive())" no catch.

Sds,

Walter Mourão
http://waltermourao.com.br
http://arcadian.com.br
http://oriens.com.br



2010/9/9 Carlos Eduardo Serpa <cadu....@gmail.com>

--
Você recebeu esta mensagem por que é membro do Google Group "Javasf".
http://groups.google.com/group/javasf
 
Conheça também:
- Grupo Java Brazil em http://groups.google.com/group/thejavabrazil

Carlos Eduardo Serpa

unread,
Sep 9, 2010, 9:14:15 AM9/9/10
to jav...@googlegroups.com
Olá Walter, isso que achei estranho não tem um 'cause by', o que fiz foi o seguinte ... tenho o interface Dao que os metodos lança exceções e DaoImpl implementa a interface e não trata transação nenhuma .. então ele repassa a exceção...
Onde está dando esse erro é uma classe Service onde devo tratar a transação.
Me explica melhor como deveria ser para tirar esse "if(transaction != null && transaction.isActive())"

Resolvi o problema inicializando a transação como propriedade da classe Service, pois dentro do try{} como é recomendado dá o erro que mencionei .. tenho mais de um método que usa transações.

Valeu

2010/9/9 Walter Mourão <walter...@gmail.com>

Walter Mourão

unread,
Sep 9, 2010, 10:10:53 AM9/9/10
to jav...@googlegroups.com
é só uma sugestão...


Session session = HibernateUtil.getSession();
Dao<Person> daoPerson = new DaoImpl<Person>(session, Person.class);
Person person = new Person();
Transaction transaction=session.beginTrannsaction();

try{

    person.setName('Lisa');
    daoPerson.salvar(person);
    transaction.commit();
} catch (Exception e) {
     transaction.rollback();
     e.printStackTrace();
}       
 finally{           
      session.close();
 }


Observe que se vc tira o beginTransaction de dentro do try, é garantido que se o fluxo entra no try, o transaction é válido e não é necessário fazer o if dentro do catch. Claro que vc pode colocar um try ao redor to begin transaction também:
...
Transaction transaction;
try{
transaction=session.beginTrannsaction();
} catch
...

mas é questão de gosto & desenho da aplicação...
2010/9/9 Carlos Eduardo Serpa <cadu....@gmail.com>
Session session = HibernateUtil.getSession();
Reply all
Reply to author
Forward
0 new messages