ola pessoal,
Estou desenvolvendo uma aplicação utilizando hibernate, só que estou tendo problemas ao tentar salvar na base de dados, as consultas estao funcionando normalmente.
Ele nao gera exception e de acordo com o log, parece que ocorreu tudo normalmente, mas quando vou verificar a base de dados, ele nao inseriu o registro.
Alguém ja passou por isto, ou se tiver alguma dica de como solucionar este problema, ficaria grato.
Abaixo vai uma pequena parte do log:
09:38:16,261 INFO SessionFactoryImpl:161 - building session factory
09:38:16,886 INFO SessionFactoryObjectFactory:82 - Not binding factory to JNDI, no JNDI name configured
09:38:16,886 INFO HibernateSessionFactory:22 - opening new session
09:38:17,120 DEBUG SQL:393 - select this_.id as id0_0_, this_.descricao as descricao0_0_, this_.uf as uf0_0_ from estado this_ order by this_.uf asc
Hibernate: select this_.id as id0_0_, this_.descricao as descricao0_0_, this_.uf as uf0_0_ from estado this_ order by this_.uf asc
09:38:17,167 INFO HibernateSessionFactory:22 - opening new session
09:38:17,214 DEBUG SQL:393 - select this_.idparoquia as idparoquia1_0_, this_.nome as nome1_0_, this_.descricao as descricao1_0_, this_.endereco as endereco1_0_ from paroquia this_ order by this_.nome asc
Hibernate: select this_.idparoquia as idparoquia1_0_, this_.nome as nome1_0_, this_.descricao as descricao1_0_, this_.endereco as endereco1_0_ from paroquia this_ order by this_.nome asc
09:38:51,464 INFO HibernateSessionFactory:22 - opening new session
09:38:51,464 INFO Dao:27 - salvando Paroquia: null Nome: teste Endereco: teste
09:38:51,480 DEBUG SQL:393 - select max(idparoquia) from paroquia
Hibernate: select max(idparoquia) from paroquia
ta blz…
ParoquiaForm
public void actionPerformed( ActionEvent event )
{
Session session = null;
session = HibernateSessionFactory.openSession();
ParoquiaDao paroquiaDao = new ParoquiaDao(session);
if(event.getActionCommand().equals("Cadastrar")){
Paroquia paroquia = new Paroquia();
paroquia.setNome(nomeText.getText());
paroquia.setDescricao(descricaoField.getText());
paroquia.setEndereco(enderecoTextPane.getText());
paroquiaDao.save(paroquia);
}
}
paroquiaDao
package src.model.home;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;
import src.model.Paroquia;
public class ParoquiaDao extends Dao<Paroquia>{
Session session = super.getSession();
public ParoquiaDao(Session session) {
super(session, Paroquia.class);
}
@SuppressWarnings("unchecked")
public List<Paroquia> buscaParoquia(String descricao){
Criteria c = session.createCriteria(Paroquia.class);
c.add(Restrictions.ilike("descricao", descricao));
c.addOrder(Order.asc("uf"));
return c.list();
}
@SuppressWarnings("unchecked")
public List<String> buscaNomesDeParoquias(){
Criteria c = getSession().createCriteria(Paroquia.class);
c.setProjection(Projections.property("descricao"));
return c.list();
}
@SuppressWarnings("unchecked")
public List<Paroquia> listaParoquias(){
Criteria criteria = session.createCriteria( Paroquia.class );
criteria.addOrder(Order.asc("nome"));
return criteria.list();
}
}
Dao
package src.model.home;
import org.apache.log4j.Logger;
import org.hibernate.Session;
public class Dao<T> {
private static Logger logger = Logger.getLogger(Dao.class);
private Class persistentClass;
private Session session;
public Dao(Session session, Class persistentClass){
this.session = session;
this.persistentClass = persistentClass;
}
protected Session getSession() {
return session;
}
@SuppressWarnings("unchecked")
public T load(Long id){
logger.info("lendo "+persistentClass+"com id "+id);
return (T) session.load(persistentClass, id);
}
public void save(T t){
logger.info("salvando "+t);
session.save(t);
}
}
Como pode ver, eu tentei utilizar o código do MundoJava mas nao usei anotaçoes, pode ter interferido em alguma coisa em particular?
Obrigado galera pela ajuda. 
Verifique 2 pontos a princípio :
Verifique no log, se está passando no método Save() da sua classe DAO.
Se estiver passando, então verifique se a classe que você está salvando, está mapeada no seu hibernate.cfg.xml.
Se estiver mapeada e passando no save(), verifique se elagum ponto você abre uma transação e não dá o commit().
Abraço.
Agora funcionou, obrigado Luis Soares… estava faltando o transation :oops:
ehehe… um outro pequeno detalhe, teria como me dizer se esta seria uma implementação aceitavel ou se teria uma mais indicada, segue a parte do código que adicionei o commit
public void save(T t){
logger.info("salvando "+t);
Transaction transation = session.beginTransaction();
logger.info("Abrindo Transacao " + transation);
session.save(t);
transation.commit();
}
Cara, isso depende do seu projeto. Se for um projeto crítico, aconselho melhorar o controle de transações, ter uma classe com essa responsabilidade.
Mas esta implementação resolve o problema de maneira simples. Eu a adotaria em um projeto comum, sem maiores necessidades.
Abraço !