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

Weblogic 12.1.3上的JPA2.1和Hibernate Validator 5.1.2

宋涵衍
2023-03-14

我正在尝试将我的项目配置为在Weblogic 12.1.3上使用Hibernate Validator 5.1.2运行JPA2.1,但当我尝试部署我的项目时遇到了问题。

我使用手动方法将weblogic配置为使用JPA2.1,如本weblogic 12.1.3文档页面所述:http://docs.oracle.com/middleware/1213/wls/EJBAD/using_toplink.htm#EJBAD1508

我想在我的项目中使用hibernate validator 5.1.2,我将其配置为:

Maven依赖项:

<dependency>
 <groupId>org.hibernate</groupId>
 <artifactId>hibernate-validator</artifactId>
 <version>5.1.2.Final</version>
</dependency>

weblogic。xml

<container-descriptor>
    <prefer-application-packages>
        <!-- hibernate validator 5.1.2 over HV 4.1 -->
        <package-name>javax.validation.*</package-name>
        <package-name>org.hibernate.validator.*</package-name>
        <!-- guava 13 -->
        <package-name>com.google.common.collect.*</package-name>
    </prefer-application-packages>
    <prefer-application-resources>
        <!-- hibernate validator 5.1.2 over HV 4.1 -->
        <resource-name>META-INF/validation-mapping-1.1.xsd</resource-name>
        <resource-name>META-INF/validation-configuration-1.1.xsd</resource-name>
    </prefer-application-resources>
</container-descriptor>

在部署时,我遇到以下异常:

<Aug 1, 2014 10:46:16 AM CEST> <Error> <Deployer> <BEA-149265> <Failure occurred in the execution of deployment request with ID "8725280002070" for task "0". Error is: "weblogic.application.ModuleException: java.lang.ClassNotFoundException: org.hibernate.validator.HibernateValidator"
weblogic.application.ModuleException: java.lang.ClassNotFoundException: org.hibernate.validator.HibernateValidator
    at weblogic.application.internal.ExtensibleModuleWrapper.prepare(ExtensibleModuleWrapper.java:114)
    at weblogic.application.internal.flow.ModuleListenerInvoker.prepare(ModuleListenerInvoker.java:100)
    at weblogic.application.internal.flow.ModuleStateDriver$1.next(ModuleStateDriver.java:175)
    at weblogic.application.internal.flow.ModuleStateDriver$1.next(ModuleStateDriver.java:170)
    at weblogic.application.utils.StateMachineDriver$ParallelChange.run(StateMachineDriver.java:80)
    Truncated. see log file for complete stacktrace
Caused By: java.lang.ClassNotFoundException: org.hibernate.validator.HibernateValidator
    at weblogic.utils.classloaders.GenericClassLoader.findLocalClass(GenericClassLoader.java:357)
    at weblogic.utils.classloaders.GenericClassLoader.findClass(GenericClassLoader.java:318)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at weblogic.utils.classloaders.GenericClassLoader.loadClass(GenericClassLoader.java:186)
    Truncated. see log file for complete stacktrace
> 

当我用JPA2.0和Hibernate Validator 4.3.1在Weblogic 12.1.2上配置我的项目时,我没有遇到这个异常。

有人对如何解决这个问题有什么建议吗?

共有2个答案

袁永贞
2023-03-14

由于您激活了JPA 2.1,这意味着JPA的类在最高的类加载器中加载。JPA类“使用”Hibernate Validator,因此要求Hibernate类在相同或比JPA类更高的类加载器中可用。

尝试在启动脚本中加载Hibernate JAR和JPA 2.1 JAR。我不确定这是否有效,但这肯定是一个类加载器排序问题。

如果您不确定在哪个类加载器中加载Hibernate类,请使用WebLogic CAT(类加载器分析工具)查看它应该放在哪里。

希望有帮助。

葛航
2023-03-14

Oracle上周发布了“Bug临时补丁:20087183”来修复此问题。

 类似资料:
  • 我正在测试JPA2。1和新的“模式生成”功能。为此,我在HyperSQL数据库下测试了两个实现: Eclipse Link 2.5.2-M1,它是参考实现。 Hibernate4.3 我对实现没有任何偏好(甚至对性能也没有偏好)。我测试了EclipseLink,因为它是第一个JPA2。1实现可用,但现在,Hibernate4.3在这里,JPA2也在这里。1合规。我唯一想要的是获得独立于JPA提供者

  • 我有一个2.1.4版本的项目,带有spring boot数据。 该项目具有以下关系实体:ApplicationEntity ApplicationTranslateEntity LanguageEntity它在数据库中有一个区域设置关系表(ManyToMany),该表中有一个用于不同语言的文本的额外表(ApplicationTranslateEntity)。 org.hibernate.Query

  • 将变量绑定到本机查询时出错。EclipseLink(JPA2.1) 内部异常:org.PostgreSQL.util.psqlException:错误:“$1”位置或附近的语法错误:12错误代码:0线程“awt-eventqueue-0”javax.Persistence.persistenceException:Exception[EclipseLink-4002](Eclipse Persis

  • 在JavaEE环境中,我将JPA2.1实现与EclipseLink一起使用, CarColor转换器: persistence.xml > 当我在persistence.xml文件上注释转换器的声明,并试图将我的实体持久化到数据库中时,会出现这样的错误:“请确保转换器类名正确,并且存在于持久化单元定义中。”并且没有编译时间异常,只有一个非常明确的警告:

  • 我需要一些关于实现spring JPA查询的建议。由于输入长度的原因,我的查询很复杂。 作为输入,我有: 15条件-如果不为空,则检查相等; 2条件-在if not null之间进行检查 此外,输出必须是可分页的。 有其他选择吗? 唯一的方法是用CriteriaBuilder构建一个自定义查询?