Initial SessionFactory creation failed.java.lang.NullPointerException

1 resposta
Jackye

Olá! Estou iniciando um estudo sobre o hibernate. Usando o relacionamento de N:M como Annotation @ManyToMany Bidirecional e blah, blah... (rsrsrsrsrsrsr :D )
Estava testando o cadastro de Autor, mas tá dando um erro ao iniciar a conexão, veja o erro:
[color=red]Initial SessionFactory creation failed.java.lang.NullPointerException
Exception in thread "main" java.lang.ExceptionInInitializerError
at Persistencia.HibernateUtil.(HibernateUtil.java:27)
at Teste.TesteInserir.main(TesteInserir.java:20)
Caused by: java.lang.NullPointerException
at org.hibernate.cfg.AnnotationBinder.processElementAnnotations(AnnotationBinder.java:1245)
at org.hibernate.cfg.AnnotationBinder.fillComponent(AnnotationBinder.java:1841)
at org.hibernate.cfg.AnnotationBinder.bindId(AnnotationBinder.java:1878)
at org.hibernate.cfg.AnnotationBinder.processElementAnnotations(AnnotationBinder.java:1281)
at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:754)
at org.hibernate.cfg.AnnotationConfiguration.processArtifactsOfType(AnnotationConfiguration.java:534)
at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:286)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1286)
at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:859)
at Persistencia.HibernateUtil.(HibernateUtil.java:23)
... 1 more
Java Result: 1[/color]

Estou testando a persistencia de dados da seguinte forma:
public static void main(String[] args) {
  
   Session sessao = HibernateUtil.getSessionFactory().openSession();
    
    AutorDAO dao = new AutorDAO();
    Autor a = new Autor();
    a.setCodAutor(1);
    a.setNome("Antonio marcos");
    
    sessao.save(a);
    
}
No projeto de Teste tenho as seguintes classes para a pesistencia e etc: Classe GenericHibernateDAO:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Persistencia;

import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Criterion;

public abstract class GenericHibernateDAO<T, ID extends Serializable>
        implements GenericDAO<T, ID> {
    
    private Class<T> entidadePersistente;
    private Session sessao;
 
    public GenericHibernateDAO() {
        this.entidadePersistente = (Class<T>) ((ParameterizedType) getClass()
                                .getGenericSuperclass()).getActualTypeArguments()[0];
    }
 
    @SuppressWarnings("unchecked")
    public void setSession(Session s) {
        this.sessao = s;
    }
 
    protected Session getSession() {
        if (sessao == null)
            sessao = HibernateUtil.getSessionFactory().openSession();
        else
            if (!sessao.isOpen())
                sessao = HibernateUtil.getSessionFactory().openSession();
        return sessao;
    }
 
    public Class<T> getEntidadePersistente() {
        return entidadePersistente;
    }
 
    //@SuppressWarnings("unchecked")
    @Override
    public T findById(ID id) {
        T entidade = (T) getSession().load(getEntidadePersistente(), id);
        return entidade;
    }
 
    @SuppressWarnings("unchecked")
    @Override
    public List<T> findAll() {      
        return findByCriteria();
    }
 
    @SuppressWarnings("unchecked")
    @Override
    public T salvar(T entidade) {
        Transaction transacao = getSession().beginTransaction();
        getSession().save(entidade);
        transacao.commit();
        getSession().close(); 
        return entidade;
    }
 
    @Override
    public void remover(T entidade) {
        Transaction transacao = getSession().beginTransaction();
        getSession().delete(entidade);
        transacao.commit();
        getSession().close(); 
    }
    
    @Override
    public void atualizar(T entidade) {
        Transaction transacao = getSession().beginTransaction();
        getSession().saveOrUpdate(entidade);
        transacao.commit();
        getSession().close(); 
    }    
 
    public void flush() {
        getSession().flush();
    }
 
    public void clear() {
        getSession().clear();
    }
 
    /**
     * Use this inside subclasses as a convenience method.
     */
    @SuppressWarnings("unchecked")
    protected List<T> findByCriteria(Criterion... criterion) {
        Criteria crit = getSession().createCriteria(getEntidadePersistente());
        for (Criterion c : criterion) {
            crit.add(c);
        }
        return crit.list();
   }

}
Classe HibernateUtil:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Persistencia;

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

public class HibernateUtil {

    private static final SessionFactory sessionFactory;
    
    static {
        try {
            // Create the SessionFactory from standard (hibernate.cfg.xml) 
            // config file.
            sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
        } catch (Throwable ex) {
            // Log the exception. 
            System.err.println("Initial SessionFactory creation failed." + ex);
            throw new ExceptionInInitializerError(ex);
        }
    }
    
    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }
}

Por que tá dando esse erro?
:(

1 Resposta

A

Primeiro eu evitaria o relacionamento N:M criando uma nova tabela relacional,

segundo o seu erro provavelmente aponta para ausencia de alguma biblioteca…

Criado 19 de janeiro de 2012
Ultima resposta 1 de mai. de 2013
Respostas 1
Participantes 2