java.lang.NoClassDefFoundError:无法初始化类business.HibernateUtil

时间:2014-09-06 06:54:15

标签: java hibernate

我正在尝试从表中获取数据我正在使用以下代码从db获取数据。

public List<UserInfoSetting> fetchAll(Long aid) {
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        Transaction tx = session.beginTransaction();
        List<UserInfoSetting> obj = null;
        try {
            String hql = "select s from UserInfoSetting s where s.atom.id=:aid ";
            Query query = session.createQuery(hql);
            query.setParameter("aid", aid);
            obj = query.list();
            tx.commit();

        } catch (HibernateException e) {
             if (tx != null) {
                tx.rollback();
            }
        } finally {
            session.close();
        }
        return obj;
    }

HibernateUtil.java

public class HibernateUtil {

    private static final SessionFactory sessionFactory;

    static {
        try {
              sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
        } catch (Throwable ex) {
             System.err.println("Initial SessionFactory creation failed." + ex);
            throw new ExceptionInInitializerError(ex);
        }
    }

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

显示以下异常

根本原因

java.lang.NoClassDefFoundError: Could not initialize class business.HibernateUtil
    setting.user.UserCommunicationDao.fetchAll(UserCommunicationDao.java:146)
    setting.user.UserCommunication.fetchAll(UserCommunication.java:64)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    java.lang.reflect.Method.invoke(Method.java:483)

如何解决上述问题

1 个答案:

答案 0 :(得分:0)

这意味着您在类路径中没有获得所有正确的Hibernate库,或者您没有包含您已编写的类。如果您使用Eclipse进行编码,请查找项目设置并将Hibernate库添加为项目的依赖项。

您需要添加hibernate-core,但也需要添加其他一些。

Maven会帮忙......

如果您更改了HibernateUtil类的名称,它会对您有所帮助:有一个标准的Hibernate类具有相同的名称。虽然原则上你可以有两个具有相同名称但在不同包中的类,但它可能会引起混淆。 (例如,它并不完全清楚它能找到哪一个。)