[RESOLVIDO] HIBERNATE - sessionFactory não inicializada

13 respostas
J

Boa noite a todos,

estou com um problema quando tento persistir um objeto no banco de dados...
pelo que estou vendo meu session não está sendo preenchido com a sessionFactory(está retornando nulo) ,
por favor... Alguem pode me ajudar???
seguem as Classes...

package br.com.locadora.persistence;


import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.SessionFactory;


public class HibernateUtil {
    private static final SessionFactory sessionFactory;

    static {
        try {
            
            sessionFactory = new AnnotationConfiguration().configure("br/com/locadora/config/mysql_hibernate.cfg.xml").buildSessionFactory();
        } catch (Throwable ex) {
            
            System.err.println("Initial SessionFactory creation failed." + ex);
            throw new ExceptionInInitializerError(ex); // ele está caindo no catch (não está preenchendo o sessionFactory)
        }
    }

    public static SessionFactory getSessionFactory() {
        return sessionFactory; //esta retornando nullo 
    }
}
@Override
	public void save(E entity) throws Exception {
		session = HibernateUtil.getSessionFactory().openSession(); // não estou conseguindo abrir a sessao... (sessionFactory nulo)
		transaction = session.beginTransaction();
		session.save(entity);
		transaction.commit();
		session.close();
	}
public class Cadastro {

	public static void main(String[] args) {
		
		Cadastro c = new Cadastro();
		
		c.cadastraCategorias();
	
	}

	public void cadastraCategorias(){
		
		try {
			
			
			
		
		String categorias[] = {"acao","aventura","terror"};
		Categoria categoria = null;
		GenericDaoHibernate<Categoria, Integer> cd = new CategoriaDao();

		for(int i = 0; i<3;i++){
			categoria = new Categoria();
			categoria.setDescricao(categorias[i]);
			cd.save(categoria);  //chamo o metodo save de GenericDaoHibernate instanciando sua subclasse Categoria...
			System.out.println("Categoria Salva");
		}
	
		} catch (Exception e) {
			System.out.println("erro" + e.getMessage());
			e.printStackTrace();
		}
		
	}
	
	
	
	
}

13 Respostas

J
public class HibernateUtil {  
    private static SessionFactory buildSessionFactory() {  
        try {  
              
            AnnotationConfiguration cfg = new AnnotationConfiguration();
               cfg.configure("br/com/locadora/config/mysql_hibernate.cfg.xml");
                return cfg.buildSessionFactory();
        } catch (Throwable ex) {  
                      System.out.println("SessionFactory falhou " + ex);  
            throw new ExceptionInInitializerError(ex);
        }  
    }
Você nao declarou antes a sessao e transaction

@Override  
        public void save(E entity) throws Exception {  
              Session sessao= null;
               Transaction transaction  = null;
        try{
             sessao= HibernateUtil.getSessionFactory().openSession();
             transaction = session.beginTransaction();   
             sessao.save(entity);  
             transaction.commit();  
     }catch(HibernateException ex){
             sysout("Nao foi possível inserir + " ex.getMessage());
    } finally{
    try{
        sessao.close();
 }  catch(Throwable e)
{
        sysout("Erro ao fechar" + e.getMessage());
}
}
F

Verifica se o cfg está realmente no local indicado ou verifica se o seu xml está correto, se estiver usando o netbeans você pode fazer isso clicando com o botão direito do mouse dentro do xml, depois clica em verificar xml, ou validar xml.

Abraços.

Fica com DEUS.

J

Então Jardel.ads, declarei o session e o transaction sim.. Só que em uma classe abstrata.

public abstract class GenericDaoHibernate<E, ID extends Serializable> implements GenericDao<E, ID>  {

	
	protected Session session;
	protected Transaction transaction;
	protected Criteria criteria;
	protected Query query;
	
	private Class<E> entity;
	
	public GenericDaoHibernate(Class<E> entity) {
		this.entity = entity;
	}

	@Override
	public void save(E entity) throws Exception {
		session = HibernateUtil.getSessionFactory().openSession();
		transaction = session.beginTransaction();
		session.save(entity);
		transaction.commit();
		session.close();
	}

	@Override
	public void delete(E entity) throws Exception {
		session = HibernateUtil.getSessionFactory().openSession();
		transaction = session.beginTransaction();
		session.delete(entity);
		transaction.commit();
		session.close();
		
	}

	@Override
	public void update(E entity) throws Exception {
		session = HibernateUtil.getSessionFactory().openSession();
		transaction = session.beginTransaction();
		session.update(entity);
		transaction.commit();
		session.close();
		
	}

	@SuppressWarnings("unchecked")
	@Override
	public E findById(ID key) throws Exception {
		session = HibernateUtil.getSessionFactory().openSession();
		return (E) session.get(entity, key);
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<E> findAll() throws Exception {
		session = HibernateUtil.getSessionFactory().openSession();
		criteria = session.createCriteria(entity);
		return criteria.list();
	}
	
	
}

Caro Fexx, ele esta encontrando o arquivo xml, não está apontando erro de diretório não, enquanto o próprio, eu creio que esta correto.. Mas vou posta-lo para melhor entendimento ..

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
  <session-factory>
    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/projeto_locadora</property>
    <property name="hibernate.connection.username">root</property>
    <property name="hibernate.connection.password">coti</property>
	<property name="hibernate.format_sql">true</property>
	<property name="hibernate.show_sql">true</property>
	
	   
	    <mapping class="br.com.locadora.entity.Categoria"/>    
	    <mapping class="br.com.locadora.entity.Cliente"/>
	    <mapping class="br.com.locadora.entity.Endereco"/>
	    <mapping class="br.com.locadora.entity.Filme"/>
	    <mapping class="br.com.locadora.entity.Locacao"/>
	    <mapping class="br.com.locadora.entity.Midia"/>

 </session-factory>
</hibernate-configuration>

E Agora... A tela da morte.. rs

log4j:WARN No appenders could be found for logger (org.hibernate.cfg.annotations.Version).
log4j:WARN Please initialize the log4j system properly.
Initial SessionFactory creation failed.java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter.<init>(Z)V
Exception in thread "main" java.lang.ExceptionInInitializerError
	at br.com.locadora.persistence.HibernateUtil.<clinit>(HibernateUtil.java:19)
	at br.com.locadora.persistence.GenericDaoHibernate.save(GenericDaoHibernate.java:28)
	at br.com.locadora.persistence.Cadastro.cadastraCategorias(Cadastro.java:29)
	at br.com.locadora.persistence.Cadastro.main(Cadastro.java:11)
Caused by: java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter.<init>(Z)V
	at net.sf.cglib.core.DebuggingClassWriter.<init>(DebuggingClassWriter.java:47)
	at net.sf.cglib.core.DefaultGeneratorStrategy.getClassWriter(DefaultGeneratorStrategy.java:30)
	at net.sf.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:24)
	at net.sf.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:216)
	at net.sf.cglib.core.KeyFactory$Generator.create(KeyFactory.java:145)
	at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:117)
	at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:108)
	at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:104)
	at net.sf.cglib.proxy.Enhancer.<clinit>(Enhancer.java:69)
	at org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.getProxyFactory(CGLIBLazyInitializer.java:107)
	at org.hibernate.proxy.pojo.cglib.CGLIBProxyFactory.postInstantiate(CGLIBProxyFactory.java:43)
	at org.hibernate.tuple.entity.PojoEntityTuplizer.buildProxyFactory(PojoEntityTuplizer.java:162)
	at org.hibernate.tuple.entity.AbstractEntityTuplizer.<init>(AbstractEntityTuplizer.java:135)
	at org.hibernate.tuple.entity.PojoEntityTuplizer.<init>(PojoEntityTuplizer.java:55)
	at org.hibernate.tuple.entity.EntityEntityModeToTuplizerMapping.<init>(EntityEntityModeToTuplizerMapping.java:56)
	at org.hibernate.tuple.entity.EntityMetamodel.<init>(EntityMetamodel.java:269)
	at org.hibernate.persister.entity.AbstractEntityPersister.<init>(AbstractEntityPersister.java:425)
	at org.hibernate.persister.entity.SingleTableEntityPersister.<init>(SingleTableEntityPersister.java:109)
	at org.hibernate.persister.PersisterFactory.createClassPersister(PersisterFactory.java:55)
	at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:226)
	at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1291)
	at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:915)
	at br.com.locadora.persistence.HibernateUtil.<clinit>(HibernateUtil.java:15)
	... 3 more
F

Se o jar do log4j estiver em seu classpath, verifica se a importação de alguma entidade está diferente disso:
import javax.persistence.Entity;

J

Sim meu amigo, as importações nas entidades estão tudo javax.persistence.*, tanto que gerei as tabelas pelo própio Hibernate, com as annotations… enfim…

F

Cara se não for o jar, essa mensagem normalmente aparece porque não tem o log4j.properties

J

Então , meu jar está legal para utilizar o Hibernate 3.5, agora, realmente não tenho esse arquivo log4j.properties mesmo não…

F

Normalmente esse WARN senão for o jar é o arquivos log4j.properties.

J

Aquele problema de não estar reconhecendo o log4j.properties , já está safo,
mas to dando uma pesquisada e to descobrindo que o problema é com as libs mesmo…

nitial SessionFactory creation failed.java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter.<init>(Z)V Exception in thread "main" java.lang.ExceptionInInitializerError at br.com.locadora.persistence.HibernateUtil.<clinit>(HibernateUtil.java:19) at br.com.locadora.persistence.Teste.main(Teste.java:10) Caused by: java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter.<init>(Z)V at net.sf.cglib.core.DebuggingClassWriter.<init>(DebuggingClassWriter.java:47)

vou ver o que faço…

F

jlsilva:
Aquele problema de não estar reconhecendo o log4j.properties , já está safo,
mas to dando uma pesquisada e to descobrindo que o problema é com as libs mesmo…

nitial SessionFactory creation failed.java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter.<init>(Z)V Exception in thread "main" java.lang.ExceptionInInitializerError at br.com.locadora.persistence.HibernateUtil.<clinit>(HibernateUtil.java:19) at br.com.locadora.persistence.Teste.main(Teste.java:10) Caused by: java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter.<init>(Z)V at net.sf.cglib.core.DebuggingClassWriter.<init>(DebuggingClassWriter.java:47)

vou ver o que faço…

Ok cara, boa sorte.

Abraços.

Fica com DEUS.

J

jlsilva

se já resolveu o problema, edita teu tópico e coloca como [RESOLVIDO]

J

Amigos, acabei de resolver… O problema era com 1 lib… Apenas uma libzinha… rs . Abraços.

M

qual lib!?

Criado 10 de abril de 2013
Ultima resposta 28 de ago. de 2013
Respostas 13
Participantes 4