Mybatis 报错:java.lang.NoSuchMethodException: java.lang.Long.<init>()
来源:互联网 发布:英伟达优化软件 编辑:程序博客网 时间:2024/06/05 04:53
用户找角色时, 用户mapper中使用association 关联角色mapper 中的查询.
用户代码
package mybatis.simple.model;import java.io.Serializable;import java.util.Date;public class SysUser implements Serializable { private static final long serialVersionUID = -7811230963635946774L; private Long id; private String userName; private String userPassword; private String userEmail; private String userInfo; private Date createTime; private byte[] headImg; private SysRole sysRole; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getUserPassword() { return userPassword; } public void setUserPassword(String userPassword) { this.userPassword = userPassword; } public String getUserEmail() { return userEmail; } public void setUserEmail(String userEmail) { this.userEmail = userEmail; } public String getUserInfo() { return userInfo; } public void setUserInfo(String userInfo) { this.userInfo = userInfo; } public Date getCreateTime() { return createTime; } public void setCreateTime(Date createTime) { this.createTime = createTime; } public byte[] getHeadImg() { return headImg; } public void setHeadImg(byte[] headImg) { this.headImg = headImg; } public SysRole getSysRole() { return sysRole; } public void setSysRole(SysRole sysRole) { this.sysRole = sysRole; }}用户接口配置:
package mybatis.simple.mapper;import tk.mybatis.simple.model.SysUser;public interface SysUserMapper { SysUser selectUserAndRoleByPrimaryKey02(Long id);}用户mapper.xml 配置
<resultMap id="userWithRole02" type="tk.mybatis.simple.model.SysUser"> <association property="sysRole" column="{id=role_id}" select="tk.mybatis.simple.mapper.SysRoleMapper.selectByPrimaryKey"/> </resultMap> <select id="selectUserAndRoleByPrimaryKey02" resultMap="userWithRole02"> select u.* , ur.role_id from sys_user u inner join sys_user_role ur on ur.user_id=u.id where u.id=#{id} </select>
<select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap"> select <include refid="Base_Column_List" /> from sys_role where id = #{id,jdbcType=BIGINT} </select>
测试代码
import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;import org.junit.BeforeClass;import org.junit.Test;import tk.mybatis.simple.model.SysUser;import java.io.IOException;import java.io.Reader;import java.util.Date;import java.util.List;public class SysUserTest extends BaseTest { private static SqlSessionFactory sqlSessionFactory; @BeforeClass public static void buildSqlSessionFactory() { try { Reader reader = Resources.getResourceAsReader("mybatis-config.xml"); sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); } catch (IOException e) { e.printStackTrace(); } } public SqlSession getSqlSession() { return sqlSessionFactory.openSession(); } @Test public void testselectUserAndRoleByPrimaryKey02(){ SqlSession sqlSession = getSqlSession(); try{ SysUserMapper mapper = sqlSession.getMapper(SysUserMapper.class); SysUser sysUser = mapper.selectUserAndRoleByPrimaryKey02(1L); System.out.println(sysUser); } finally { sqlSession.close(); } }}测试后报错为:
DEBUG [main] - ==> Preparing: select u.* , ur.role_id from sys_user u inner join sys_user_role ur on ur.user_id=u.id where u.id=?
DEBUG [main] - ==> Parameters: 1(Long)
TRACE [main] - <== Columns: id, user_name, user_password, user_email, user_info, head_img, create_time, role_id
TRACE [main] - <== Row: 1, admin, 123456, admin@mybatis.chengkai, 管理员, <<BLOB>>, 2017-07-29 22:02:32.0, 1
org.apache.ibatis.exceptions.PersistenceException:
### Error querying database. Cause: org.apache.ibatis.reflection.ReflectionException: Error instantiating class java.lang.Long with invalid types () or values (). Cause: java.lang.NoSuchMethodException: java.lang.Long.<init>()
### The error may exist in tk/mybatis/simple/mapper/SysUserMapper.xml
### The error may involve tk.mybatis.simple.mapper.SysUserMapper.selectUserAndRoleByPrimaryKey02
### The error occurred while handling results
### SQL: select u.* , ur.role_id from sys_user u inner join sys_user_role ur on ur.user_id=u.id where u.id=?
### Cause: org.apache.ibatis.reflection.ReflectionException: Error instantiating class java.lang.Long with invalid types () or values (). Cause: java.lang.NoSuchMethodException: java.lang.Long.<init>()
at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:122)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:113)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:73)
at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:69)
at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:53)
at com.sun.proxy.$Proxy5.selectUserAndRoleByPrimaryKey02(Unknown Source)
at mybatis.simple.mapper.SysUserTest.testselectUserAndRoleByPrimaryKey02(SysUserTest.java:27)
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.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
Caused by: org.apache.ibatis.reflection.ReflectionException: Error instantiating class java.lang.Long with invalid types () or values (). Cause: java.lang.NoSuchMethodException: java.lang.Long.<init>()
at org.apache.ibatis.reflection.factory.DefaultObjectFactory.instantiateClass(DefaultObjectFactory.java:90)
at org.apache.ibatis.reflection.factory.DefaultObjectFactory.create(DefaultObjectFactory.java:50)
at org.apache.ibatis.reflection.factory.DefaultObjectFactory.create(DefaultObjectFactory.java:42)
at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.instantiateParameterObject(DefaultResultSetHandler.java:696)
at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.prepareCompositeKeyParameter(DefaultResultSetHandler.java:676)
at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.prepareParameterForNestedQuery(DefaultResultSetHandler.java:659)
at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.getNestedQueryMappingValue(DefaultResultSetHandler.java:635)
at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.getPropertyMappingValue(DefaultResultSetHandler.java:404)
at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.applyPropertyMappings(DefaultResultSetHandler.java:384)
at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.getRowValue(DefaultResultSetHandler.java:346)
at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleRowValuesForSimpleResultMap(DefaultResultSetHandler.java:298)
at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleRowValues(DefaultResultSetHandler.java:273)
at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleResultSet(DefaultResultSetHandler.java:246)
at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleResultSets(DefaultResultSetHandler.java:160)
at org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:63)
at org.apache.ibatis.executor.statement.RoutingStatementHandler.query(RoutingStatementHandler.java:78)
at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:62)
at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:303)
at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:154)
at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:102)
at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:82)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:120)
... 29 more
Caused by: java.lang.NoSuchMethodException: java.lang.Long.<init>()
at java.lang.Class.getConstructor0(Class.java:3082)
at java.lang.Class.getDeclaredConstructor(Class.java:2178)
at org.apache.ibatis.reflection.factory.DefaultObjectFactory.instantiateClass(DefaultObjectFactory.java:62)
... 50 more
后将角色mapper.xml id="selectByPrimaryKey" 中parameterType 去掉后执行成功.
应该是因为配置了ParameterType 后Mybatis 会自动创建对象并且设置参数. 但java.lang.Long 没有空参数的构造函数报错. 去掉parameterType 后, Mybatis 会自动进行类型匹配.
- Mybatis 报错:java.lang.NoSuchMethodException: java.lang.Long.<init>()
- 报错 :java.lang.NoSuchMethodException: <init>()
- java.lang.NoSuchMethodException <init>()
- mybatis报错java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Long
- Caused by: java.lang.NoSuchMethodException: callDrawGLFunction [long]
- java.lang.NoSuchMethodException:构造函数<init>失败
- hadoop(mapreduce):java.lang.NoSuchMethodException: ******Mapper.<init>()
- Spring:java.lang.NoSuchMethodException: <init>()的解决办法
- java.lang.NoSuchMethodException: MapReduce.WordCount$MyMapper.<init>()
- 解决报错:java.lang.NoSuchMethodException: com.tangyuan.entity.RicherProduct.<init>()
- java.lang.RuntimeException: java.lang.NoSuchMethodException: tfidf$Reduce.<init>()
- springBoot整合myBatis错误:java.lang.NoSuchMethodException
- java.lang.NoSuchMethodException翻译
- java.lang.NoSuchMethodException 解决办法
- java.lang.NoSuchMethodException
- java.lang.NoSuchMethodException
- java.lang.NoSuchMethodException: 解决办法
- java.lang.NoSuchMethodException
- compile freeswitch based on macOS
- Android播放音频
- Linux基础之八
- rest/flask/nginx/uwsgi/supervisor
- 常用的距离测度
- Mybatis 报错:java.lang.NoSuchMethodException: java.lang.Long.<init>()
- MySQL 批量更新数据
- QA问答系统中的深度学习技术实现
- 第十二周【项目一-Prim算法的验证】
- Java单链表、双端链表、有序链表实现
- 第12周项目5-拓扑排序算法验证
- Android开发,so文件报错 No implementation found for XXX
- Opencv之鼠标响应setMouseCallback()的用法
- Matlab连接数据库ACCESS数据库