Initial SessionFactory creation failed.java.lang.NullPointerException

Olá! Estou iniciando um estudo sobre o hibernate. Usando o relacionamento de N:M como Annotation @ManyToMany Bidirecional e blah, blah… (rsrsrsrsrsrsr :smiley: )
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:

[code] 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);

}[/code]
No projeto de Teste tenho as seguintes classes para a pesistencia e etc:
Classe GenericHibernateDAO:

[code]/*

  • 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();

}

}
[/code]
Classe HibernateUtil:

[code]/*

  • 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;
}

}
[/code]

Por que tá dando esse erro?
:frowning:

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

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