最近在用Kotlin
+Spring Boot
写一个后端项目,实体类习惯性地用了Kotlin
中的data class
,可是Spring要求要有一个无参的构造函数,不然可能会抛出java.sql.SQLDataException
。要使data class
可以生成一个无参的构造函数,有两种方法能够作到:html
1.给data class
的构造函数中的每个参数都赋上默认值。好比:java
data class User( @TableId(value = "id", type = IdType.AUTO) var id: Int?=-1, var userName: String?=null, //用户名 var age: Int?=null, //年龄 var password: String?=null, //密码 var name: String?=null, //姓名 var email: String?=null //邮箱 ) : Serializable
2.使用无参编译器插件no-arg
。下面咱们就来看看这种方法。sql
首先须要在工程的build.gradle
中添加no-arg
插件的依赖,版本跟Kotlin
的版本一致:后端
plugins { …… id "org.jetbrains.kotlin.plugin.noarg" version "1.3.41" }
我用的是plugins
的形式,若是你使用的是buildscript
块的话就能够这样添加:app
buildscript { dependencies { classpath "org.jetbrains.kotlin:kotlin-noarg:1.3.41" } } apply plugin: "kotlin-noarg"
说实话,在看官方文档时这一步并很差理解,这里只描述我通过本身的实践以后得出的经验。首先建立一个注解类,类名咱们能够定为NoArg
:函数
annotation class NoArg
而后最关键一步来了,回到工程的build.gradle
文件,添加无参注解列表:gradle
noArg { annotation("com.lindroid.projectname.annotation.NoArg") }
annotation
中的路径就是咱们建立的NoArg
注解类所在的包目录。路径必定要写好,不要出错!此时无参插件就已经配置好了。咱们能够在data class
前面添加@NoArg
注解,这样编译器就能为其生成一个无参构造函数。使用示例以下:ui
@NoArg data class User( @TableId(value = "id", type = IdType.AUTO) var id: Int?, var userName: String?, //用户名 var age: Int?, //年龄 var password: String?, //密码 var name: String?, //姓名 var email: String? //邮箱 ) : Serializable
若是你的项目中已经添加了kotlin-jpa
插件,那么基本上就没必要单独添加无参插件了。kotlin-jpa
对无参插件作了包装,当你使用 @Entity
、 @Embeddable
与 @MappedSuperclass
这几个注解时,都会默认支持无参注解的。spa
Kotlin官方文档.net