:142 : 错误: 无法更新视图"xxx"
详细:不来自单表或单视图的视图不能自动更新.
建议:启用对视图的更新操作, 需要提供INSTEAD OF UPDATE触发器或者一个无条件的 ON UPDATE DO INSTEAD 规则.
15:13:02.297 --- [INFO ]c.j.b.e.h.GlobalExceptionHandler :77 : RuntimeException[code: 5, message: could not execute statement; nested exception is org.hibernate.exception.GenericJDBCException: could not execute statement]
org.springframework.orm.jpa.JpaSystemException: could not execute statement; nested exception is org.hibernate.exception.GenericJDBCException: could not execute statement
at org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:353)
at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:255)
at org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransactionManager.java:538)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:744)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:712)
at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:631)
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:385)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:99)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:747)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:689)
at com.jesun.b2b.service.mall.goods.MallBizGoodsService$$EnhancerBySpringCGLIB$$730fb2a1.findDetailById(<generated>)
在执行我的自定义接口findDetailById时报错;
goods对象类:(Table是个单视图)
一开始以为是视图实体对象调用set方法导致的,借鉴了网上的意见,在findDetailById接口上设置为失误等级为只读
@Transactional(propagation = Propagation.NOT_SUPPORTED)
然后该问题解决。
后面又出现了这个问题,我发现该注释失效。
重新解读,发现 不来自单表或单视图的视图不能自动更新。我其中有个业务是视图join表获得结果。
最后就分开写了,就解决了。今天就不详细写了,有时间再整理下。
补充:
可以同步创建新对象,通过属性copy,再修改新对象中对应的属性值,解决session中的对象更新问题。