1

我正在尝试在 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) 中复制了一个文件 rt.jar,其中包含包 javax.namaing.*,编译错误似乎已解决。但我现在从 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/ hibernate/SessionFactory;.openSession()Lorg/hibernate/classic/Session; 08-30 15:21:05.123: D/dalvikvm(240): VFY: 在 0x000b 处替换操作码 0x72 08-30 15:21:05.123: D/dalvikvm(240): VFY: Lcom/example 中的死代码 0x000e-003f /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: 无法解析 Lcom/example/testfordatabase/HibernateUtility 中的新实例 65 (Lorg/hibernate/cfg/Configuration;);08-30 15:21:05.133: D/dalvikvm(240): VFY: 在 0x0000 处替换操作码 0x22 08-30 15:21:05.133: D/dalvikvm(240): VFY: Lcom/example 中的死代码 0x0002-000f /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): Initial SessionFactory creation failed.java.lang.NoClassDefFoundError: org.hibernate.cfg.Configuration 08-30 15:21:05.133: W/dalvikvm(240): Exception Ljava/lang/ExceptionInInitializerError; 在 Lcom/example/testfordatabase/HibernateUtility 期间抛出;。08-30 15:21:05.133: D/AndroidRuntime(240): 关闭 VM 08-30 15:21:05.133: W/dalvikvm(240): threadid=1: 线程退出但未捕获异常 (group=0x4001d800) 08 -30 15:21:05.173: E/AndroidRuntime(240): 致命异常: main 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): 在 android.view.View.performClick(View.java:2408) 08-30 15:21:05.173: E/AndroidRuntime (240): 在 android.view.View$PerformClick.run(View.java:8816) 08-30 15:21:05.173:

请帮助:D谢谢

4

1 回答 1

1

并非所有标准 java 类都可以在 android 上使用。其中之一是包 javax.naming - 这就是你得到这个问题的原因。不过,您可以从其他来源添加缺失的课程。(甚至撕掉它们 orr rt.jar ) - 但是这样做你最终可能会复制完整的 java 运行时。无论如何,我发现hibernate对于android来说有点太重了。

于 2012-08-30T11:31:22.643 回答