有没有人能够在 NetWeaver AS Java 7.3 上运行的应用程序中使用 Hibernate 4.3。我按照这里的示例:http : //scn.sap.com/docs/DOC-1349 通过创建一个包含以下 jar 文件的 Hibernate 应用程序库容器项目来使用 Heavy Resources 类加载器:
- antlr-2.7.7.jar
- dom4j-1.6.1.jar
- hibernate-commons-annotations-4.0.5.Final.jar
- hibernate-core-4.3.6.Final.jar
- hibernate-jpa-2.1-api-1.0.0.Final.jar
- jandex-1.1.0.Final.jar
- javassist-3.18.1-GA.jar
- jboss-logging-3.1.3.GA.jar
- jboss-logging-annotations-1.2.0.Beta1.jar
- jboss-transaction-api_1.2_spec-1.0.0.Final.jar
- xml-apis-1.0.b2.jar
然后我部署 Hibernate.ear 并将其作为参考添加到我的应用程序 application-j2ee-engine.xml 文件中:
<reference reference-type="hard">
<reference-target provider-name="sap.com" target-type="application">Hibernate</reference-target>
</reference>
我的应用程序可以找到休眠 jar 并使用它们,但我收到以下错误:
java.lang.NoSuchMethodError: javax.persistence.JoinColumn.foreignKey()Ljavax/persistence/ForeignKey
当 Hibernate 使用旧版本的 JPA api 时,就会发生这种情况。Hibernate 4 使用 2.1 版本的 JPA api,因此需要 hibernate-jpa-2.1-api-1.0.0.Final.jar 文件中的类,而不是 NetWeaver 提供的 JPA 1.0 类。
我相信该应用程序正在获取 JPA 类的 1.0 版本,因为 Heavy Resources 类加载器在查找 javax.persistence.* 类时首先委托其父类加载器,因此它在那里找到了 1.0 JPA api 类而没有得到它们来自 Hibernate.ear 应用程序中定义的 jar,就像我希望的那样。
有没有办法指定重资源类加载器成为子类加载器?或者有没有人找到另一种在 NetWeaver 7.3 中使用 Hibernate 4.3 的方法。我对 NetWeaver 一点也不熟悉,因此我们将不胜感激。
谢谢