Il y a un exemple sur le Web sur la façon d'utiliser les annotations dans Hibernate (avant cela, j'ai travaillé sur le même exemple, mais il utilisait à la place .xml. Et j'ai réussi à le faire fonctionner sans exceptions). Alors maintenant j'ai:

Initial session factory creation failedjava.lang.NoSuchFieldError: namingStrategy
Exception in thread "main" java.lang.ExceptionInInitializerError
at firstproject.HibernateUtil.<clinit>(HibernateUtil.java:14)
at firstproject.StudentDAO.addSubject(StudentDAO.java:82)
at firstproject.Test.main(Test.java:12) Caused by: java.lang.NoSuchFieldError: namingStrategy
at org.hibernate.cfg.AnnotationConfiguration.reset(AnnotationConfiguration.java:250)
at org.hibernate.cfg.Configuration.<init>(Configuration.java:125)
at org.hibernate.cfg.Configuration.<init>(Configuration.java:119)
at org.hibernate.cfg.AnnotationConfiguration.<init>(AnnotationConfiguration.java:108)
at firstproject.HibernateUtil.<clinit>(HibernateUtil.java:11)
... 2 more

Voici un code qui peut vous aider:

public class HibernateUtil {
    private static final SessionFactory sessionFactory;

    static {
        try {
            sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory(); // HibernateUtil.java:11
        } catch (Throwable ex) {
            System.err.println("Initial session factory creation failed" + ex);
            throw new ExceptionInInitializerError(ex); // HibernateUtil.java:14
        }
    }

    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }
}

public class StudentDAO {
    public Long addSubject(Subject subject) {
        Session session = HibernateUtil.getSessionFactory().getCurrentSession(); // StudentDAO.java:82
        session.beginTransaction();
        Long result = (Long) session.save(subject);
        session.getTransaction().commit();
        return result;
    }
}

public class Test {
    public static void main(String[] args) {
        StudentDAO dao = new StudentDAO();
        Subject subject = new Subject();
        subject.setSubjectName("Mathematics");
        dao.addSubject(subject); // Test.java:12
    }
}
0
Dmitry Klimov 3 janv. 2016 à 13:42

3 réponses

Meilleure réponse

Bonjour Kleeo

Vous avez écrit la ligne suivante dans la classe HibernateUtil .

sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();

Remplacez cette ligne de code par la ligne écrite ci-dessous et réessayez. J'espère que cela fonctionnera pour vous.

sessionFactory = new Configuration().configure().buildSessionFactory();
6
Rish 3 janv. 2016 à 10:51

AnnotationConfiguration est obsolète dans Hibernate 3.6.

Comme vous pouvez le voir dans la documentation (voir le lien ci-dessous), toutes les fonctionnalités ont été déplacées vers la configuration.

Vous pouvez utiliser la configuration en toute sécurité à la place.

sessionFactory = new Configuration().configure().buildSessionFactory();

Documentation AnnotationConfiguration:

http://docs.jboss.org/hibernate/core/3.6/javadocs/org/hibernate/cfg/AnnotationConfiguration.html

2
Pabs 27 avril 2016 à 06:44

Utilisez ci-dessous: sessionFactory = nouvelle configuration (). Configure (). BuildSessionFactory ();

Et assurez-vous également que votre cfg.xml doit être présent à la racine du dossier src. Sinon, vous obtiendrez une exception de impossible de trouver le fichier cfg

0
Neeraj 12 déc. 2018 à 12:14