繁体   English   中英

Eclipse中的“ java.lang.NoClassDefFoundError:org / hibernate / proxy / HibernateProxy”

[英]“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版本。

休眠4.X

您必须设置ProxyFactory classLoaderProvider以提供包含以下内容的类加载器:

  1. 您的实体类别
  2. Hibernate代理(org.hibernate.proxy)
  3. Javassist代理(javassist.util.proxy)

休眠5.X

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM