当前位置: 首页 > 知识库问答 >
问题:

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

单于阳
2023-03-14

我想在JBoss7.1中使用Hibernate4.3的多租户特性。

通过在jboss-deployment-structure中添加以下行,我设法将其包含在我的war中

<exclusions>
   <module name="org.hibernate" />
</exclusions>

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

这使得Hibernate4.3可以加载,但不幸的是,我出现了一个错误

java.lang.NoSuchMethodError: javax.persistence.Table.indexes()[Ljavax/persistence/Index;

这是因为在Hibernate4.3使用JPA2.1时加载了JPA2.0

<property name="jboss.as.jpa.managed" value="false" /> 
<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>

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

唯一起作用的是将整个javaee.api排除在jboss-deployment-structure中,正如另一个线程所建议的那样

<exclusions>
    <module name="javax.persistence.api"/>
    <module name="javaee.api"/>
</exclusions>

但这会给我的其余代码带来很多问题。

<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>

正如你所看到的,我已经尝试了很多没有运气的事情,所以如果任何人有另一个想法,它是最欢迎的。

共有1个答案

湛宏旷
2023-03-14

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

1)确保您没有过渡依赖于JPA2.0

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

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

删除旧的JAR并将新的Hibernate JAR复制到as7/modules/org/Hibernate/main+as7/module/org/Hibernate/envers/main

更新as7/module/org/hibernate/main/module.xml+as7/module/org/hibernate/envers/main/module.xml以命名您在其中复制的JAR

更新的as7/module/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>
 类似资料:
  • 问题内容: 我正在使用Entity Framework Code First开发WCF RESTful Web服务。 我的桌子上有很多列。我这样做是为了获得特定用户: 在此表上,有一个密码列,我不想返回此列。 如何从该选择中排除密码列? 问题答案: 在select语句中指定所需的每一列:

  • 问题内容: 我有一个要从特定对象中排除的组件: 否则,它似乎与我项目中的其他班级发生冲突。我不完全理解碰撞,但是如果注释掉注释,事情就会像我希望的那样工作。但是其他依赖于此库的项目希望此类由Spring管理,因此我只想在我的项目中跳过它。 我尝试使用: 但它似乎不起作用。如果尝试使用,则会收到一个奇怪的错误,提示你无法加载一些看似随机的类: 原因:java.io.FileNotFoundExcep

  • 我想从特定中的中排除一个组件: 否则,它似乎会与我项目中的其他类发生冲突。我并不完全理解这种冲突,但是如果我注释掉< code>@Component注释,事情就会如我所愿地运行。但是其他依赖这个库的项目期望这个类由Spring管理,所以我只想在我的项目中跳过它。 我尝试使用< code>@ComponentScan。过滤器: 但是它似乎不起作用。如果我尝试使用,我会收到一个奇怪的错误,因为无法加载

  • 我有两个endpoint使用相同的模型类(Cars)。对于search chBigListendpoint,我想检索所有汽车字段,而对于search chCarSmallListendpoint,我想只检索3个字段。我尝试使用注释来做到这一点,但它对我不起作用。有人知道如何做到这一点吗?

  • Lombok项目的类注释,ToString,用于在其注释的类内自动生成一个ToString()方法。 对于这个类: 调用生成的toString()方法将生成以下输出: 注释的可选元素可用于包含或排除特定字段,但我想知道的是... 可能类似于: