2016-01-03 3 views
0

Хорошо, я сдаюсь, мне нужна ваша помощь.java.lang.NoSuchFieldError: namingStrategy

Обучение спящего режима. Теперь есть пример из того, как использовать аннотации в Hibernate (до этого я работал над одним и тем же примером, но вместо этого использовал .xml. И мне удалось заставить его работать без исключений). Так что теперь у меня есть

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 

Вот код, который может помочь

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 

    } 
} 

ответ

4

Привет Kleeo

Вы написали следующую строку в HibernateUtil класса.

Заменить эту строку кода с письменного ниже линии & повторить попытку. Надеюсь, это сработает для вас.

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

Спасибо! Я попробую, но я сделал это только потому, что это было в примере. Поэтому я не знаю, если это правильно. – Kleeo

+0

Да, безусловно. Попробуйте, и если вы найдете это полезным для вас, тогда проголосуйте за ответ, чтобы другие люди также могли получить от него какую-то помощь. – Rish

2

AnnotationConfiguration устарел в Hibernate 3.6.

Как вы можете видеть в документации (см. Ссылку ниже), все функциональные возможности были перенесены в конфигурацию.

Вместо этого вы можете использовать безопасную конфигурацию.

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

AnnotationConfiguration документация:

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

Смежные вопросы