org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: Error instantiating class com.keysking.affairs.domains.user.entity.UserRole with invalid types (long,Role) or values (4,null). Cause: java.lang.reflect.InvocationTargetException
如果你在使用kotlin和mybatis,那你非常有可能碰见上面的问题,
这个问题出现的原因,是mybatis企图寻找一个无参构造函数,
但是data class并没有提供一个无参构造函数.
@TableName("user_role")
class UserRole(
var user: Long,
var role: Role
) : BaseEntity()
于是,你到网络上寻找答案,找到了一种解决方案:
@TableName("user_role")
class UserRole(
var user: Long?=null,
var role: Role?=null
) : BaseEntity()
这可把视编程为艺术的你恶心坏了,原本优雅的kotlin,因此充满了?和!!
你在想,有没有更好的解决办法…你苦苦寻找,却没有结果
直到…你看到了本文(滑稽)
优雅解决方案
其实,类似的这种情况,伟大的jetbrains早已帮我们想到了,于是他给我们提供了NoArg解决方案.
通过这种方案,在最终生成的字节码中,将会为data class生成一个无参构造方法,但是在kotlin的编写过程中,你却找不到这个构造方法的踪影. 优雅,高效!
接下来提供maven的解决办法(gradle的可以看这里)
首先,在你的工程中新建一个注解,叫做NoArg,例如这样:
package com.keysking.demo

当使用Kotlin和MyBatis时,可能会遇到因缺少无参构造函数导致的错误。文章介绍了问题的由来,并提出了一种优雅的解决方案——使用JetBrains的NoArg注解。通过在pom.xml中配置Kotlin Maven插件,添加NoArg插件和注解,可以在不破坏代码优雅性的情况下,为数据类生成无参构造函数。只需在数据类上添加@NoArg注解,问题即可解决。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



