萝卜白菜。 2025-10-30 14:25 采纳率: 97.6%
浏览 27
已结题

TongWeb8.0 上应用采用JPA报  javax.validation.Validation相关异常

TongWeb8.0 上应用采用JPA报  javax.validation.Validation相关异常,日志中有com.tongweb.bval.jsr相关信息,如何解决?

  • 写回答

4条回答 默认 最新

  • 萝卜白菜。 2025-11-03 09:12
    关注

    这个的原因是在使用hibernate JPA时,通常默认开启了validation, 在TongWeb8.0下默认的validation实现类是 com.tongweb.bval.jsr.TWValidationProvider, 而hibernate一般采用org.hibernate.validator.HibernateValidator.

    解决办法:
    办法一:升级到TongWeb8.0.9.07版本。
    办法二:在应用中进行配置。

    <!--  在hibernate.cfg.xml中加上,javax.persistence.validation.mode默认情况下是auto的,若应用实际上不用hibernate.validator 可将其关闭    -- >
    <property name="javax.persistence.validation.mode">none</property>
    
      <!--    在spring中指明validation的实现  -->
       <bean id="my_validator"
              class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
            <property name="providerClass"
                      value="org.hibernate.validator.HibernateValidator"/>
            <property name="validationMessageSource" ref="messageSource"/>
          </bean>
    

    办法三: 若是TongWeb8.0.9.06及之前版本,且不知应用中如何关闭validation。可以设置参数

    -Dtongejb.bean-validation.provider=org.hibernate.validator.HibernateValidator
    #该参数默认为:com.tongweb.bval.jsr.TWValidationProvider
    日志中控制台会有如下异常,不影响使用

    2025-11-03 09:04:45.587 [INFO] [main] - Deploying app: version8.0.9.06/sysapp/console
    2025-11-03 09:04:45.841 [WARN] [main] - Unable to load provider class org.hibernate.validator.HibernateValidator java.lang.ClassNotFoundException: org.hibernate.validator.HibernateValidator
        at com.tongweb.server.loader.WebappClassLoaderBase.loadClass0(WebappClassLoaderBase.java:1244)
        at com.tongweb.server.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1076)
        at com.tongweb.ee.server.TongWebWebappClassLoader.loadClass(TongWebWebappClassLoader.java:243)
        at com.tongweb.server.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1037)
        at com.tongweb.tongejb.assembler.classic.ValidatorBuilder.getConfig(ValidatorBuilder.java:110)
        at com.tongweb.tongejb.assembler.classic.ValidatorBuilder.buildFactory(ValidatorBuilder.java:78)
        at com.tongweb.tongejb.assembler.classic.ValidatorBuilder.buildFactory(ValidatorBuilder.java:36)
        at com.tongweb.tongejb.assembler.classic.LazyValidatorFactory.ensureDelegate(LazyValidatorFactory.java:38)
        at com.tongweb.tongejb.assembler.classic.LazyValidatorFactory.getFactory(LazyValidatorFactory.java:49)
        at com.tongweb.tongejb.assembler.classic.Assembler.createApplication(Assembler.java:1132)
        at com.tongweb.tongejb.assembler.classic.Assembler.createApplication(Assembler.java:855)
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 11月7日
  • 已采纳回答 11月3日
  • 创建了问题 10月30日