一个奇怪的java.lang.IncompatibleClassChangeError异常

解决方法就是替换jdk版本,下面都是废话。

最近项目进行了一次小更新,添加了一个很小很小的功能,结果运行一段时间后莫名出现java.lang.IncompatibleClassChangeError,重启开始没问题,经过一段时间又出现同样的错误。

截取部分错误日志

java.lang.IncompatibleClassChangeError: null
    at org.springframework.data.jpa.convert.QueryByExamplePredicateBuilder.getPredicates(QueryByExamplePredicateBuilder.java:173) ~[spring-data-jpa-2.2.7.RELEASE.jar!/:2.2.7.RELEASE]
    at org.springframework.data.jpa.convert.QueryByExamplePredicateBuilder.getPredicate(QueryByExamplePredicateBuilder.java:102) ~[spring-data-jpa-2.2.7.RELEASE.jar!/:2.2.7.RELEASE]
    at org.springframework.data.jpa.repository.support.SimpleJpaRepository$ExampleSpecification.toPredicate(SimpleJpaRepository.java:886) ~[spring-data-jpa-2.2.7.RELEASE.jar!/:2.2.7.RELEASE]
    at org.springframework.data.jpa.repository.support.SimpleJpaRepository.applySpecificationToCriteria(SimpleJpaRepository.java:762) ~[spring-data-jpa-2.2.7.RELEASE.jar!/:2.2.7.RELEASE]
    at org.springframework.data.jpa.repository.support.SimpleJpaRepository.getQuery(SimpleJpaRepository.java:693) ~[spring-data-jpa-2.2.7.RELEASE.jar!/:2.2.7.RELEASE]
    at org.springframework.data.jpa.repository.support.SimpleJpaRepository.findAll(SimpleJpaRepository.java:499) ~[spring-data-jpa-2.2.7.RELEASE.jar!/:2.2.7.RELEASE]
    at sun.reflect.GeneratedMethodAccessor230.invoke(Unknown Source) ~[na:na]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0]
    at java.lang.reflect.Method.invoke(Unknown Source) ~[na:1.8.0]

都是在JPA层抛出的异常,但没看出明显的错误来源,遂百度一番,基本都是说的引入jar有冲突,或包含多个版本云云,还有说是hibernate-core版本对于jdk版本有一定的要求,但是之前服务运行一直很正常,没出现过问题。

好在更新内容不多,立即回退到之前版本,测试一番并没有报错。然后又将服务器的jdk拉下来(服务器是windows server 2012),用新的版本测试,结果每次都会出错。

只好硬着头皮一个文件一个文件替换,最后发现是由于引入了@OneToMany注解导致的,去掉后一切正常,可是去掉后业务逻辑有影响。

继续经过几番测试,发现jpa查询调用一定次数后就会抛异常。

又是一番捣鼓,最后发现如果使用Example查询,并且构造的probe有属性时,查询到一定次数就会抛异常,且随着属性数量增加,失败需要的次数减少。

具体原因不明,替换为本地的jdk后运行正常。

附上jdk和jpa等的版本

jpa:

spring-data-jpa-2.2.7.RELEASE

hibernate-core-5.4.15.Final

本地jdk:

java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)

服务器jdk:

java version "1.8.0"
Java(TM) SE Runtime Environment (build 1.8.0-b132)
Java HotSpot(TM) 64-Bit Server VM (build 25.0-b70, mixed mode)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值