![](/img/trans.png)
[英]“java.lang.NoClassDefFoundError: org/hibernate/proxy/HibernateProxy” which jar is missing
[英]“java.lang.NoClassDefFoundError: org/hibernate/proxy/HibernateProxy” in Eclipse
我有一个基于插件的Eclipse应用程序,其中,我将持久性数据放在X插件中,并将休眠数据库服务放在Y插件中。
持久类在X中,而HibernateUtil,Dao,所有与休眠相关的jar和持久类的hbm.xml映射文件在Y中。
当我运行该应用程序时,我看到很多异常,例如:
java.lang.RuntimeException
javassist.CannotCompileException
java.lang.ClassNotFoundException
org.hibernate.HibernateException
它们都以“ java.lang.NoClassDefFoundError:org / hibernate / proxy / HibernateProxy”结尾
如果我在本地主机上使用数据库,则这些异常不会影响我的应用程序。 但是,当我尝试连接到远程数据库时,我的嵌套HQL查询不起作用。 我猜想这与代理有关。
有没有一种方法可以解决此问题,而无需将X和Y插件合并到单个插件中?
问题不大可能是由于eclipse插件的加载机制。 有一个解决方法-伙伴加载。
在Hibernate插件的MANIFEST.MF文件中(需要伙伴加载),例如org.hibernate.eclipse,添加一行:
Eclipse-BuddyPolicy:registered
在您的插件项目或RCP项目的MANIFEST.MF文件中,添加以下行:
Eclipse-RegisterBuddy:org.hibernate.eclipse
这样可以解决问题。
这是有关此问题的博客文章:
http://hwellmann.blogspot.de/2008/11/hibernate-and-osgi-pragmatic-solution.html
您的远程部署中缺少Hibernate支持库。
在WEB-INF下创建一个lib
文件夹,并将所有支持的jar文件复制到该lib文件夹。
这样可以解决问题:
在X插件中,Eclipse-BuddyPolicy:已注册
在Y插件中,Require-Bundle :( x插件ID)Eclipse-RegisterBuddy :( x插件ID)
从根本上讲,这是经典的OSGi ClassLoader问题。 解决方案取决于您使用的Hibernate版本。
您必须设置ProxyFactory classLoaderProvider以提供包含以下内容的类加载器:
Hibernate现在在代理工厂中使用实体类的类加载器。 您必须在包含实体类 3 的捆绑软件的OSGi清单的Import-Package部分的Hibernate代理(org.hibernate.proxy)和Javassist(javassist.util.proxy)中,这可能与实体类 3不同。创建EntityManagerFactory的包。
我在运行Arquillian Test时遇到了此异常。 就我而言,我忘记将persistence.xml添加到存档中:
archive.addAsResource("META-INF/persistence.xml", "META-INF/persistence.xml");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.