Hibernate Session Factory Android

时间:2012-08-30 10:53:57

标签: java android hibernate

我正在尝试在Android上使用Hibernate。 (Eclipse Android 2.2 SDK)
似乎包含

的行中存在编译错误
HibernateUtility.getSessionFactory().openSession();  

这是HibernateUtility类:

public class HibernateUtility {

    private static final SessionFactory sessionFactory;

    static {
        try {
            // Create the SessionFactory from standard (hibernate.cfg.xml) 
            // config file.
            sessionFactory = new Configuration().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;
    }
}

eclipse中的编译错误是:

  

无法解析javax.naming.Referenceable类型。它是   间接引用所需的.class文件

我从我的java sdk(Sun JDK macosx)复制了一个包含javax.namaing。*包的文件rt.jar,编译错误似乎已经解决了。但我现在从Android SDK Logcat获得下面的运行时错误。

  

08-30 15:21:05.123:W / dalvikvm(240):VFY:无法找到课程   签名中引用(Lorg / hibernate / SessionFactory;)08-30   15:21:05.123:I / dalvikvm(240):无法找到方法   org.hibernate.SessionFactory.openSession,从方法引用   com.example.testfordatabase.EtityDao.insert 08-30 15:21:05.123:   W / dalvikvm(240):VFY:无法解析接口方法102:   Lorg /休眠/会话工厂; .openSession   ()Lorg /休眠/经典/会话; 08-30 15:21:05.123:D / dalvikvm(240):   VFY:在0x000b 08-30 15:21:05.123取代操作码0x72:   D / dalvikvm(240):VFY:死代码0x000e-003f in   LCOM /示例/ testfordatabase / EtityDao; .insert   (Lcom / example / testfordatabase / entity;)V 08-30 15:21:05.123:   D / step1(240):Step1 08-30 15:21:05.133:E / dalvikvm(240):不能   查找从方法引用的类'org.hibernate.cfg.Configuration'   com.example.testfordatabase.HibernateUtility。 08-30   15:21:05.133:W / dalvikvm(240):VFY:无法解析新实例65   (Lorg / hibernate / cfg / Configuration;)in   LCOM /示例/ testfordatabase / HibernateUtility; 08-30 15:21:05.133:   D / dalvikvm(240):VFY:将代码0x22替换为0x0000 08-30   15:21:05.133:D / dalvikvm(240):VFY:死代码0x0002-000f in   LCOM /示例/ testfordatabase / HibernateUtility ;. ()V 08-30   15:21:05.133:W / dalvikvm(240):VFY:无法找到引用的类   签名(Lorg / hibernate / SessionFactory;)08-30 15:21:05.133:   W / System.err(240):初始SessionFactory创建   failed.java.lang.NoClassDefFoundError:org.hibernate.cfg.Configuration   08-30 15:21:05.133:W / dalvikvm(240):例外   Ljava /郎/的ExceptionInInitializerError;抛出期间   LCOM /示例/ testfordatabase / HibernateUtility ;. 08-30   15:21:05.133:D / AndroidRuntime(240):关闭VM 08-30   15:21:05.133:W / dalvikvm(240):threadid = 1:线程退出   未捕获的异常(组= 0x4001d800)08-30 15:21:05.173:   E / AndroidRuntime(240):致命异常:主要08-30 15:21:05.173:   E / AndroidRuntime(240):java.lang.ExceptionInInitializerError 08-30   15:21:05.173:E / AndroidRuntime(240):at   com.example.testfordatabase.EtityDao.insert(EtityDao.java:35)08-30   15:21:05.173:E / AndroidRuntime(240):at   com.example.testfordatabase.MainActivity $ 1.onClick(MainActivity.java:34)   08-30 15:21:05.173:E / AndroidRuntime(240):at   android.view.View.performClick(View.java:2408)08-30 15:21:05.173:   E / AndroidRuntime(240):at   android.view.View $ PerformClick.run(View.java:8816)08-30 15:21:05.173:   E / AndroidRuntime(240):at   android.os.Handler.handleCallback(Handler.java:587)08-30   15:21:05.173:E / AndroidRuntime(240):at   android.os.Handler.dispatchMessage(Handler.java:92)08-30   15:21:05.173:E / AndroidRuntime(240):at   android.os.Looper.loop(Looper.java:123)08-30 15:21:05.173:   E / AndroidRuntime(240):at   android.app.ActivityThread.main(ActivityThread.java:4627)08-30   15:21:05.173:E / AndroidRuntime(240):at   java.lang.reflect.Method.invokeNative(Native Method)08-30   15:21:05.173:E / AndroidRuntime(240):at   java.lang.reflect.Method.invoke(Method.java:521)08-30 15:21:05.173:   E / AndroidRuntime(240):at   com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:868)   08-30 15:21:05.173:E / AndroidRuntime(240):at   com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)08-30   15:21:05.173:E / AndroidRuntime(240):at   dalvik.system.NativeStart.main(Native Method)08-30 15:21:05.173:   E / AndroidRuntime(240):引起:   java.lang.ExceptionInInitializerError 08-30 15:21:05.173:   E / AndroidRuntime(240):at   com.example.testfordatabase.HibernateUtility。(HibernateUtility.java:31)   08-30 15:21:05.173:E / AndroidRuntime(240):... 13更多08-30   15:21:05.173:E / AndroidRuntime(240):引起:   java.lang.NoClassDefFoundError:org.hibernate.cfg.Configuration 08-30   15:21:05.173:E / AndroidRuntime(240):at   com.example.testfordatabase.HibernateUtility。(HibernateUtility.java:27)

PLZ帮助:D 感谢

1 个答案:

答案 0 :(得分:1)

并非所有标准的java类都可用于android。其中一个是包javax.naming - 这就是你得到这个问题的原因。您可以从其他来源添加缺少的类。 (或者甚至将它们翻录成orr rt.jar) - 但是这样做可能会导致重复完整的Java运行时。我发现hibernate对于android来说有点太重量了。