最近在用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