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