编译时Hibernate版本和Wildfly的兼容性提供

时间:2017-12-11 10:25:40

标签: hibernate java-ee wildfly

我目前的项目目标是Wildfly 10,它提供了JPA 2.1的实现:它使用Hibernate 5.0.7.Final

使用版本 5.0.12.Final 的hibernate编译时依赖项是否安全?或者我应该坚持使用低于或等于应用程序服务器运行的版本?

我不太了解这个主题,所以欢迎任何指向好解释的指针。

注意:我知道wildfly上的hibernate版本可以升级,但不应该在我们的环境中完成。

由于

- 编辑 -

有关pom.xml的更多详细信息:

    <!-- Java EE 7 -->
    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-web-api</artifactId>
        <version>7.0</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-api</artifactId>
        <version>7.0</version>
        <scope>provided</scope>
    </dependency>
    ...
    <!-- compile dependencies -->
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-jpamodelgen</artifactId>
        <scope>compile</scope>
        <optional>true</optional>
        <version>5.0.12.Final</version>
    </dependency>

核心hibernate库可能是由容器提供的,但我依赖于 hibernate-jpamodelgen 来处理类型安全的Criteria查询。

有没有办法知道javaee-api工件包含什么?

3 个答案:

答案 0 :(得分:0)

编译意味着您将依赖性与app / war一起打包。首先,如果您不了解类加载器如何适用于您在wildfly中的每个部署,则可能会遇到一些类路径问题。除此之外,如果每个应用程序打包它们已经在类路径中的依赖项,那么您最终将大量不必要地使用磁盘空间和内存。

我建议你阅读this

答案 1 :(得分:0)

相对安全,Hibernate团队不允许微更新中的API更改。

您需要确保您的代码仅使用API​​;如果你有自定义扩展,它提取内部实现细节和/或扩展内部,你可能会遇到一些变化;保证这一点的最佳方法是在开发时使用完全相同的版本。

更好的选择是升级您使用的Hibernate版本;您可以通过将其包含在应用程序中来使用更新版本(尽管这需要设置一些其他配置属性 - 请参阅WildFly JPA wiki)或升级应用程序服务器中的那个。

答案 2 :(得分:0)

从您发布的pom.xml和您定位Wildfly的事实我将其设置为提供并将版本设置为Wildfly 10提供的版本。这样,这是最安全的选择:

  <dependency>
     <groupId>org.hibernate</groupId>
     <artifactId>hibernate-jpamodelgen</artifactId>
     <version>5.0.7.Final</version>
     <scope>provided</scope>
  </dependency>

另外两个javaee-apiredundantjavaee-web-apijavaee-api的子集。我会删除javaee-web-api