我目前的项目目标是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工件包含什么?
答案 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-api
是redundant
。 javaee-web-api
是javaee-api
的子集。我会删除javaee-web-api
。