java.lang.NoSuchFieldError:namingStrategy

时间:2016-01-03 10:42:24

标签: java hibernate

好的,我放弃了,我需要你的帮助。

学习Hibernate。现在有一个例子来自如何在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

    }
}

3 个答案:

答案 0 :(得分:4)

嗨Kleeo

您已在 HibernateUtil 类中撰写以下内容。

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

将此行代码替换为以下写入的行&amp;重试。我希望这对你有用。

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

答案 1 :(得分: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

答案 2 :(得分:0)

在下面使用: sessionFactory = new Configuration()。configure()。buildSessionFactory();

还要确保您的cfg.xml应该出现在src文件夹的根目录中。否则,您将获得无法找到cfg文件的异常