Hibernate não grava no BD!

Bom dia, pessoal,

Estou passando por um problema estranho… Tenho um formulário na minha aplicação onde eu cadastro uma pessoa. Eu preencho todos os campos, chamo o metodo cadastrar();, ele é executado sem problemas, o struts exibe a página de sucesso, eu volto até a table com os registros e, de fato, ele está lá, como se tivesse sido gravado.

Mas quando eu vou no banco de dados (postgres), a tabela está vazia. Eu clico no registro e dá erro (claro, ele não foi gravado).

O mais estranho é que as vezes eu consigo salvar os dados normalmente, ou seja, é um problema intermitente.
Alguem já passou por algo parecido?

Eu utilizo um framework proprio da empresa. Todos os metodos estão padronizados. Vou postar o exemplo de um metodo de cadastro e um de exclusao (exclusão também tá dando pau, ele some com o registro do sistema mas ele continua no banco de dados).

 public void save(Entity entity){
        Session session = factory.getCurrentSession();
        factory.beginTransaction();
        
        try {
            session.save(entity);
            session.flush();
            if(isLocalScope()){
                factory.commit();
            }
        } catch (Exception ex){
            factory.rollback();
            throw new DAOException("Falha ao salvar objeto.", ex);
        }
    }
 public void delete(Entity entity){
        Session session = factory.getCurrentSession();
        factory.beginTransaction();
        
        try {
            session.delete(entity);
            session.flush();
            if(isLocalScope()){
                factory.commit();
            }
        } catch (Exception ex){
            factory.rollback();
            throw new DAOException("Falha ao excluir objeto.", ex);
        }
    }

Eu nao entendi para que serve o metodo isLocalScope, mas ele sempre passa direto. Mesmo não executando o commit, ele custuma gravar os objetos no banco. Se alguem suber o porque, eu agradeceria! :smiley:

Valeu pessoal.;

o problema é justamente esse… sem o commit() ele não grava no banco… vc vê os objetos, na sessão do hibernate ele vai existir, vc vai conseguir pesquisar no seus sitema, ate ele ser fechado, depois puff, o que não foi comitado, so fica na tranzação, e tudo é perdido, e nada vai pro banco…

se vc não sabe o que é o metodo isLocalScope() então procure saber… o que posso te falar, pela inferencia do nome, é um método que verifica se vc esta em uma tranzação, ou seja, se vc esta adcionando salvando, apagando, varios objetos de uma vez, e só depois irá fechar a tranzação, ou se vc não esta em uma tranzação, e por isso ele comita ali mesmo…

procure seus colegas na empresa, busque saber como o método é implementado, olhe a API da sua empresa e veja como é

eu não sei como o pessoal ai impelementa esse método, mas pra no meu repositorio eu faço assim

[code] public void save(Entity entity){
Session session = factory.getCurrentSession();
boolean needCommit = !session.getTransaction().isActive(); //se não há tranzação ativa então eu vou commitar
if (needCommit) {
factory.beginTransaction(); //se eu preciso comitar, então tb preciso abrir a tranzação
//caso contrario, a tranzação ja estaria aberta, e não precisa inicia-la
}

   try {  
       session.save(entity);  
       session.flush();  
       if(needCommit){  
           factory.commit();  
       }  
   } catch (Exception ex){
       if (needCommit) {
           factory.rollback(); //veja bem, se o scopo da tranzação não é sua, então vc não deve dar rollback
                               //o dono da tranzação que deve tratar a exceção, e dar rollback quando for necessario.
       }
       throw new DAOException("Falha ao salvar objeto.", ex);  
   }  

} [/code]