本文已参与「新人创作礼」活动,一起开启掘金创作之路。
1,使用注解 @Transactional(rollbackFor = {RuntimeException.class, Error.class}) 时候,不能跨库操作,否则会报该数据表不存在的问题
@Transactional(rollbackFor = {RuntimeException.class, Error.class})
### Error querying database. Cause: java.sql.SQLSyntaxErrorException: Table 'db_weighbridge.sys_project' doesn't exist
2,报错:org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'isBand' in 'class java.lang.String'
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'isBand' in 'class java.lang.String'
at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:77)
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:446)
at com.sun.proxy.$Proxy110.selectList(Unknown Source)
at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:230)
at org.apache.ibatis.binding.MapperMethod.executeForMany(MapperMethod.java:139)
at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:76)
at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:59)
at com.sun.proxy.$Proxy137.selectProjectWorkerByProjectId(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:343)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:198)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:139)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:93)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212)
at com.sun.proxy.$Proxy138.selectProjectWorkerByProjectId(Unknown Source)
at com.dingsi.smz.service.impl.ProjectWorkerServiceImpl.selectProjectWorkerListByProjectId(ProjectWorkerServiceImpl.java:88)
at com.dingsi.smz.controller.SmzBadRecordController.add(SmzBadRecordController.java:101)
at com.dingsi.smz.controller.SmzBadRecordController$$FastClassBySpringCGLIB$$e3e5adc9.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:749)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:93)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:688)
at com.dingsi.sm
报错原因: 我们的mapper文件中只传入了一个String类型的参数信息
public List selectProjectWorkerByProjectId(String projectId);
但是我们在xml文件中却使用了两个参数:
<select id="selectProjectWorkerByProjectId" parameterType="String" resultMap="ProjectWorkerResult">
<include refid="selectProjectWorkerVo"/>
<where>
<if test="isBand != null "> and is_band = #{isBand}</if>
and project_id = #{projectId} and is_active = 1
</where>
</select>
更改就较为简单了,xml文件删除掉一个string类型的参数或者改变传入的parameterType的属性都可以。
3,mysql查询出现
mysql遇见Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggre的问题
报错结果如下:
报错如下:
问题出现的原因:MySQL 5.7.5及以上功能依赖检测功能。如果启用了ONLY_FULL_GROUP_BY SQL模式(默认情况下),MySQL将拒绝选择列表,HAVING条件或ORDER BY列表的查询引用在GROUP BY子句中既未命名的非集合列,也不在功能上依赖于它们。(5.7.5之前,MySQL没有检测到功能依赖关系,默认情况下不启用ONLY_FULL_GROUP_BY。有关5.7.5之前的行为的说明,请参见“MySQL 5.6参考手册”。) 打开mysql的命令行界面: 查询:
select @@global.sql_mode
查询出来的值为:
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
去掉ONLY_FULL_GROUP_BY,重新设置值
set @@global.sql_mode
='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
关闭mysql,重新打开即可。
2,报错:
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.blog.system.mapper.SysMenuMapper' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.blog.system.mapper.SysMenuMapper' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1644)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1203)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1164)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:593)
这个问题大多是因为mapper接口程序没扫描到导致的,查看下自己的maper扫描路径或者增加注解即可。
5,mysql查询时报错:
Cause: java.sql.SQLSyntaxErrorException: Unknown column 'device_name' in 'order clause'
出现这个问题一般是在你的mapper文件中,sql编写的问题。看看是不是又多余的“;”或者其他的语句。另外,如果你的mapper语句里面已经有了order by 排序的字段,你前端的表格中就不能直接使用排序的js来进行排序操作,会跟mapper里面的order字段冲突。 再就是写sql语句时,注意命名规范,本次我出现这个问题是因为我的数据库字段中该字段名称为deviceName,我mapper返回的result中也是deviceName,但是当我在前端调用以该字段进行排序时,前端传入的排序字段是deviceName ,但是由于触发了mysql的命名规则,mysql会自动将该字段deviceName变为device_name的形式,所以导致了报错
6,使用的MySQL数据库,启动项目时报错:java.sql.SQLSyntaxErrorException: Table 'blog_backstage.QRTZ_LOCK doesn't exist
这是由于数据库没有没有打开大小写模糊导致的问题。
解决方法:
打开MySQL的配置文件my.cnf,添加不区分大小写配置
lower_case_table_names = 1
重启下MySQL数据库即可。
持续更新。。。