返回顶部
首页 > 资讯 > 精选 >如何解决Spring JPA 使用@transaction注解时产生CGLIB代理冲突问题
  • 350
分享到

如何解决Spring JPA 使用@transaction注解时产生CGLIB代理冲突问题

2023-06-20 19:06:35 350人浏览 薄情痞子
摘要

本篇内容介绍了“如何解决spring JPA 使用@transaction注解时产生CGLIB代理冲突问题”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能

本篇内容介绍了“如何解决spring JPA 使用@transaction注解时产生CGLIB代理冲突问题”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

Spring JPA 使用@transaction注解时产生CGLIB代理冲突

在使用JPA进行数据库的删除操作时需要使用@Transactional注解来支持事物:

 @Modifying    @Transactional    @Query(" delete from FollowerInfo " +            " where crmAuth = :crmAuth and investUserId = :invUserId")    void deleteByCrmAuthAndInvUserId(@Param("crmAuth") String crmAuth, @Param("invUserId") Long invUserId);

但是,在添加了如上方法后,测试服务启动失败。

查看日志报错如下:

Caused by: java.lang.IllegalArgumentException: Cannot subclass final class class com.sun.proxy.$Proxy52at org.springframework.cglib.proxy.Enhancer.generateClass(Enhancer.java:446)at org.springframework.cglib.transfORM.TransforminGClassGenerator.generateClass(TransformingClassGenerator.java:33)at org.springframework.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25)at org.springframework.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:216)at org.springframework.cglib.proxy.Enhancer.createHelper(Enhancer.java:377)at org.springframework.cglib.proxy.Enhancer.createClass(Enhancer.java:317)at org.springframework.aop.framework.ObjenesisCglibAopProxy.createProxyClassAndInstance(ObjenesisCglibAopProxy.java:57)at org.springframework.aop.framework.CglibAopProxy.getProxy(CglibAopProxy.java:202)... 38 more[2017-02-09 10:56:33 ERROR] [localhost-startStop-1] (org.springframework.WEB.context.ContextLoader:331) - Context initialization failedorg.springframework.beans.factory.BeanCreationException: Error creating bean with name 'adviserCommFollowerServiceImpl': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.ounersc.ic.adviser.repository.commUnity.AdviserCommFollowerRepository com.ounersc.ic.adviser.service.impl.AdviserCommFollowerServiceImpl.adviserCommFollowerRepository; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'adviserCommFollowerRepository': Post-processing of FactoryBean's singleton object failed; nested exception is org.springframework.aop.framework.AopConfigException: Could not generate CGLIB subclass of class [class com.sun.proxy.$Proxy52]: Common causes of this problem include using a final class or a non-visible class; nested exception is java.lang.IllegalArgumentException: Cannot subclass final class class com.sun.proxy.$Proxy52at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:334)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1204)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:538)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)at org.springframework.beans.factory.support.DefaultSingletonBeanReGIStry.getSingleton(DefaultSingletonBeanRegistry.java:229)at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:725)at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:757)at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:480)at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:403)at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306)at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106)at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4738)at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5181)at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1408)at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1398)at java.util.concurrent.FutureTask.run(FutureTask.java:262)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)at java.lang.Thread.run(Thread.java:745)Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.ounersc.ic.adviser.repository.community.AdviserCommFollowerRepository com.ounersc.ic.adviser.service.impl.AdviserCommFollowerServiceImpl.adviserCommFollowerRepository; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'adviserCommFollowerRepository': Post-processing of FactoryBean's singleton object failed; nested exception is org.springframework.aop.framework.AopConfigException: Could not generate CGLIB subclass of class [class com.sun.proxy.$Proxy52]: Common causes of this problem include using a final class or a non-visible class; nested exception is java.lang.IllegalArgumentException: Cannot subclass final class class com.sun.proxy.$Proxy52at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:555)at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87)at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:331)... 22 moreCaused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'adviserCommFollowerRepository': Post-processing of FactoryBean's singleton object failed; nested exception is org.springframework.aop.framework.AopConfigException: Could not generate CGLIB subclass of class [class com.sun.proxy.$Proxy52]: Common causes of this problem include using a final class or a non-visible class; nested exception is java.lang.IllegalArgumentException: Cannot subclass final class class com.sun.proxy.$Proxy52at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.getObjectFromFactoryBean(FactoryBeanRegistrySupport.java:116)at org.springframework.beans.factory.support.AbstractBeanFactory.getObjectForBeanInstance(AbstractBeanFactory.java:1512)at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:313)at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1081)at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1006)at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:904)at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:527)... 24 moreCaused by: org.springframework.aop.framework.AopConfigException: Could not generate CGLIB subclass of class [class com.sun.proxy.$Proxy52]: Common causes of this problem include using a final class or a non-visible class; nested exception is java.lang.IllegalArgumentException: Cannot subclass final class class com.sun.proxy.$Proxy52at org.springframework.aop.framework.CglibAopProxy.getProxy(CglibAopProxy.java:212)at org.springframework.aop.framework.ProxyFactory.getProxy(ProxyFactory.java:109)at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.createProxy(AbstractAutoProxyCreator.java:445)at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.wrapifNecessary(AbstractAutoProxyCreator.java:331)at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.postProcessAfterInitialization(AbstractAutoProxyCreator.java:291)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsAfterInitialization(AbstractAutowireCapableBeanFactory.java:422)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.postProcessObjectFromFactoryBean(AbstractAutowireCapableBeanFactory.java:1713)at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.getObjectFromFactoryBean(FactoryBeanRegistrySupport.java:113)... 31 moreCaused by: java.lang.IllegalArgumentException: Cannot subclass final class class com.sun.proxy.$Proxy52at org.springframework.cglib.proxy.Enhancer.generateClass(Enhancer.java:446)at org.springframework.cglib.transform.TransformingClassGenerator.generateClass(TransformingClassGenerator.java:33)at org.springframework.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25)at org.springframework.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:216)at org.springframework.cglib.proxy.Enhancer.createHelper(Enhancer.java:377)at org.springframework.cglib.proxy.Enhancer.createClass(Enhancer.java:317)at org.springframework.aop.framework.ObjenesisCglibAopProxy.createProxyClassAndInstance(ObjenesisCglibAopProxy.java:57)at org.springframework.aop.framework.CglibAopProxy.getProxy(CglibAopProxy.java:202)... 38 more09-Feb-2017 10:56:33.145 SEVERE [localhost-startStop-1] org.apache.catalina.core.StandardContext.startInternal One or more listeners failed to start. Full details will be found in the appropriate container log file09-Feb-2017 10:56:33.145 SEVERE [localhost-startStop-1] org.apache.catalina.core.StandardContext.startInternal Context [] startup failed due to previous errors

org.springframework.aop.framework.AopConfigException: Could not generate CGLIB subclass of class [class com.sun.proxy.$Proxy52]: Common causes of this problem include using a final class or a non-visible class

对于此异常,这篇帖子中讲到了产生该异常的原因,但是未给出解决办法。

Http://stackoverflow.com/questions/20063320/springMVC-proxy-issue

简单来说,原因主要是代理冲突:Spring 早期的版本,要用com.sun.proxy的代理 ,而 jpa如果加了@transaction 注解后 需要用CGLIB的代理

因此产生了冲突

解决办法:

Spring 已经在高版本中修复了该问题,把Spring从4.0升级到4.2.5后,问题解决:

在pom.xml加入:

   <properties>        <spring.framework.version>4.2.5.RELEASE</spring.framework.version>    </properties>

Spring 启用CGLIB解决事物代理失败

问题描述:

接口A提供公用的CRUD 操作,抽象类B实现接口A,接口C提供各模型特有的相关数据库操作。

类D继承抽象类B实现接口C如果使用jdk动态代理,Spring会将类D向上转型为接口C,那么在使用中必须注入接口A。

如果注入类D的类型。会报错说代理类型XX无法转换为类D的类型。

解决办法如下:

<bean id="transactionManagerCMS"  class="org.springframework.orm.hibernate4.HibernateTransactionManager">  <property name="sessionFactory" ref="mySessionFactory" />  <property name="dataSource" ref="dataSourceCMS" /> </bean> <!-- the transactional advice (what 'happens'; see the <aop:advisor/> bean  below) --> <tx:advice id="txAdvice" transaction-manager="transactionManagerCMS">  <!-- the transactional semantics... -->  <tx:attributes>   <tx:method name="*" />  </tx:attributes> </tx:advice> <!-- ensure that the above transactional advice runs for any execution of  an operation defined by the FooService interface --> <aop:config proxy-target-class="true">  <aop:pointcut id="fooServiceOperation"   expression="execution(* com.harvest.smartHotels.info.dao.serviceContent.interfaces.*.*(..))" />  <aop:advisor advice-ref="txAdvice" pointcut-ref="fooServiceOperation" /> </aop:config>

动态代理使用CGLIB,这样注入类型就可以使类D。

“如何解决Spring JPA 使用@transaction注解时产生CGLIB代理冲突问题”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: 如何解决Spring JPA 使用@transaction注解时产生CGLIB代理冲突问题

本文链接: https://lsjlt.com/news/299662.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 解决Spring JPA 使用@transaction注解时产生CGLIB代理冲突问题
    Spring JPA 使用@transaction注解时产生CGLIB代理冲突 在使用JPA进行数据库的删除操作时需要使用@Transactional注解来支持事物: @Mod...
    99+
    2024-04-02
  • 如何解决Spring JPA 使用@transaction注解时产生CGLIB代理冲突问题
    本篇内容介绍了“如何解决Spring JPA 使用@transaction注解时产生CGLIB代理冲突问题”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能...
    99+
    2023-06-20
  • jpa使用注解生成表时无外键问题如何解决
    这篇“jpa使用注解生成表时无外键问题如何解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“jpa使用注解生成表时无外键问题...
    99+
    2023-07-02
  • 如何解决Spring Cloud 服务冲突问题
    本篇文章为大家展示了如何解决Spring Cloud 服务冲突问题,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一、背景在我们开发微服务架构系统时,虽然说每个微服务都是孤立的可以单独开发,但实际上并...
    99+
    2023-06-04
  • jpa使用注解生成表时无外键问题及解决
    目录jpa注解生成表时无外键使用jpa自动建表不生成外键情况情况1情况2jpa注解生成表时无外键 刚入手springboot时,在使用jpa实体注解生成表无外键。是因为jpa不知道使...
    99+
    2024-04-02
  • 如何解决gateway与spring-boot-starter-web冲突问题
    本篇内容介绍了“如何解决gateway与spring-boot-starter-web冲突问题”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!...
    99+
    2023-06-20
  • Gitlab如何用vscode工具快速解决代码冲突问题
    本篇内容主要讲解“Gitlab如何用vscode工具快速解决代码冲突问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Gitlab如何用vscode工具快速解决代码冲突问题”吧!首先我们来看看冲...
    99+
    2023-07-05
  • Android使用NestedScrollView内嵌RecycleView滑动冲突问题如何解决
    这篇“Android使用NestedScrollView内嵌RecycleView滑动冲突问题如何解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,...
    99+
    2023-07-02
  • 使用ViewPager2时出现滑动冲突如何解决
    今天就跟大家聊聊有关使用ViewPager2时出现滑动冲突如何解决,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。MainActivity.javapackage com.e...
    99+
    2023-06-14
  • windows 0xc0000005写入位置时发生访问冲突如何解决
    这篇文章主要介绍“windows 0xc0000005写入位置时发生访问冲突如何解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“windows 0xc0000005写入位置时发...
    99+
    2023-06-30
  • 如何解决页面中marquee与flash同时存在时的冲突问题
    这篇文章主要为大家展示了“如何解决页面中marquee与flash同时存在时的冲突问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何解决页面中marquee与flash同时存在时的冲突问题”...
    99+
    2023-06-08
  • 利用Debug调试代码解决0xC0000005: 读取位置 0x0000000000000000 时发生访问冲突问题
    VS2019利用Debug调试代码解决0xC0000005: 读取位置 0x0000000000000000 时发生访问冲突之前一直是使用release发布代码模...
    99+
    2023-03-09
    Debug调试代码解决0xC0000005 读取位置 0x0000000000000000 时发生访问冲突 Debug调试代码
  • 使用Viewpager时与轮播图出现冲突如何解决
    今天就跟大家聊聊有关使用Viewpager时与轮播图出现冲突如何解决,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。实例如下://解决ViewPager和轮播图滑动冲突@Overrid...
    99+
    2023-05-31
    viewpager age pager
  • 在Android中使用listview时出现滑动冲突如何解决
    在Android中使用listview时出现滑动冲突如何解决?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Android listview的滑动冲突解决方法在Android开发...
    99+
    2023-05-31
    listview android roi
  • 使用java生成json时产生栈溢出错误问题及解决方案
    目录java生成json时产生栈溢出错误环境这里会出现栈溢出错误json转换时出现栈内存溢出java生成json时产生栈溢出错误 环境 java + hibernate +html ...
    99+
    2024-04-02
  • 如何解决spring-boot使用logback的问题
    这篇文章主要介绍了如何解决spring-boot使用logback的问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。用ConsoleAppender.java来举例,假设在...
    99+
    2023-06-20
  • 如何解决@Table注解无法使用的问题
    这篇文章主要介绍了如何解决@Table注解无法使用的问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。@Table注解无法使用及报红在新建实体类时想直接序列化,遇到注解不起作...
    99+
    2023-06-26
  • Excel数据导入Mysql常见问题汇总:如何解决导入时遇到的主键冲突问题?
    Excel数据导入Mysql常见问题汇总:如何解决导入时遇到的主键冲突问题?导入数据是数据管理工作中常见的任务之一,特别是当需要将大量数据从Excel表格中导入到Mysql数据库时,可能会遇到各种各样的问题。其中一个常见的问题就是主键冲突。...
    99+
    2023-10-22
    解决方案 Excel导入 主键冲突
  • vue如何使用反向代理解决跨域问题
    这篇文章主要讲解了“vue如何使用反向代理解决跨域问题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue如何使用反向代理解决跨域问题”吧!为什么要解决跨域问题因为浏览器有限制,只有同域名同...
    99+
    2023-07-04
  • 如何解决使用openpyxl时遇到的问题
    本篇内容主要讲解“如何解决使用openpyxl时遇到的问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何解决使用openpyxl时遇到的问题”吧!最近在用python处理Excel表格是遇到...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作