从JBoss 7.1中排除JPA 2.0以使用hibernate 4.3

and*_*adi 30 hibernate jpa-2.0 jboss7.x jpa-2.1

我想在hossnate 4.3中使用JBoss 7.1中的多租户功能.

我设法通过在jboss-deployment-structure中添加以下行来将它包含在我的战争中

<exclusions>
   <module name="org.hibernate" />
</exclusions>
Run Code Online (Sandbox Code Playgroud)

并在我的pom.xml中为hibernate核心和实体管理器添加依赖项

这使得hibernate 4.3加载但不幸的是我收到了一个错误

java.lang.NoSuchMethodError: javax.persistence.Table.indexes()[Ljavax/persistence/Index;
Run Code Online (Sandbox Code Playgroud)

这是由于在hibernate 4.3使用JPA 2.1时加载了JPA 2.0

我已经看过这些线程并尝试了他们的建议 从JBoss EAP 6.1中排除JPA子系统 - 尝试在JBoss EAP 6.1中使用JPA 2.1,JBoss AS7自动加载JPA,Hibernate 4.3.0.Final和Spring Data JPA 1.4.3.RELEASE.

我添加了一个persistence.xml

<property name="jboss.as.jpa.managed" value="false" /> 
Run Code Online (Sandbox Code Playgroud)

从Spring Data中排除了hibernate jpa 2.0

<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-jpa</artifactId>
    <version>${spring-data.version}</version>
    <exclusions>
        <exclusion>
            <groupId>org.hibernate.javax.persistence</groupId>
            <artifactId>hibernate-jpa-2.0-api</artifactId>
        </exclusion>
    </exclusions>
</dependency>
Run Code Online (Sandbox Code Playgroud)

从JBoss standalone.xml中完全删除了JPA子系统,没有任何成功.

唯一能做到这一点的是在jboss-deployment-structure中排除整个javaee.api,如另一个线程所示

<exclusions>
    <module name="javax.persistence.api"/>
    <module name="javaee.api"/>
</exclusions>
Run Code Online (Sandbox Code Playgroud)

但这会给我的其余代码带来许多问题.

更新:我的jboss-deployment-structure.xml现在是这样的

<jboss-deployment-structure>
<deployment>
    <exclusions>
        <module name="org.slf4j" />
        <module name="org.slf4j.impl" />
        <module name="org.apache.log4j" />
        <module name="javax.persistence.api" />
        <module name="org.hibernate" />
    </exclusions>
    <dependencies>
        <module name="org.jboss.ironjacamar.jdbcadapters" />
        <module name="org.hornetq" />
        <module name="org.hornetq.ra" />
        <module name="org.jboss.ejb3" />
        <module name="org.jboss.ejb-client" />
    </dependencies>
</deployment>
</jboss-deployment-structure>
Run Code Online (Sandbox Code Playgroud)

如你所见,我已经尝试了许多没有运气的东西,所以如果有人有另一个想法,那么非常受欢迎.

hov*_*yan 8

我会把这个问题分成两个小的:

1)确保你不能过渡依赖于JPA 2.0

为此,您可以使用依赖图可视化工具(NetBeans内置了一个,或者您可以使用maven依赖树插件).另一种方法是在部署到JBoss之前浏览包含在工件中的库.

2)确保JBoss AS 7.1的正确配置

JBoss AS 7.1与Hibernate 4.0.x jar捆绑在一起,为了更新它们,请按照官方文档中的说明尝试这些步骤.

  • 更新当前as7/modules/org/hibernate/main文件夹以包含较新版本

  • 删除as7/modules/org/hibernate/mainas7/modules/org/hibernate/envers/main文件夹中的*.index文件

  • 备份当前内容as7/modules/org/hibernate以防出错

  • 删除旧罐子并将新的Hibernate罐子复制到as7/modules/org/hibernate/main+as7/modules/org/hibernate/envers/main

  • 更新as7/modules/org/hibernate/main/module.xml+ as7/modules/org/hibernate/envers/main/module.xml以命名您复制的jar

更新as7/modules/org/hibernate/main/module.xml将如下(请注意,依赖项不会更改):

<?xml version="1.0" encoding="UTF-8"?>

<module xmlns="urn:jboss:module:1.1" name="org.hibernate">
    <resources>
        <resource-root path="hibernate-core-4.3.5.Final.jar"/>
        <resource-root path="hibernate-commons-annotations-4.0.4.Final.jar"/>
        <resource-root path="hibernate-entitymanager-4.3.5.Final.jar"/>
        <resource-root path="hibernate-infinispan-4.3.5.Final.jar"/>
    </resources>

    <dependencies>
       .
       .
    </dependencies>
</module>
Run Code Online (Sandbox Code Playgroud)


And*_*i I 3

尝试仅删除该javax.persistence.api模块以及org.hibernate.

另外,如果您想将所有 Web 应用程序切换到 Hibernate 4.3(应该向后兼容),请按照此处所述切换到更新版本的 Hibernate 。

一些调试技巧:生成 JAR 文件后,明确检查它们包含哪些 JPA/Hibernate 库(通过解压缩它们)。另外,为了检查 Hibernate 版本,您可以按照此处描述的方式进行操作。

还要检查jboss-deployment-struct 文件的结构,因为该<exclusions>元素似乎既不在 a 中<deployment>,也不在 an <sub-deployment>element 中。


归档时间:

查看次数:

16904 次

最近记录:

9 年,11 月 前