使用Spring Data与@Entity时Kotlin类继承执行gradle build报错
错误原因
JPA规范要求所有实体类必须提供可访问的无参构造函数。你使用的Kotlin noarg插件默认只会给标注了@Entity等JPA注解的类自动生成无参构造,但不会自动处理这些类的父类。
你的Character类加了@Entity注解,插件已经为它生成了无参构造,但它继承的GameEntity父类没有无参构造,Character生成的无参构造无法调用父类的无参构造,因此触发编译异常。
解决方案
你可以选择以下任意一种方式解决:
方案1:给父类显式声明无参构造
给GameEntity的构造参数添加默认值,Kotlin会自动生成对应的无参构造:
open class GameEntity( val position: Position = Position() )
如果Position类无法直接初始化,也可以单独声明次级无参构造:
open class GameEntity( val position: Position ) { constructor() : this(Position()) // 填入Position类的默认构造参数即可 }
方案2:配置noarg插件为父类生成无参构造
你可以自定义一个无参注解,将它加入noarg插件的扫描范围,再给父类标注该注解:
- 首先创建自定义注解:
annotation class NoArg
- 给
GameEntity类添加该注解:
@NoArg open class GameEntity( val position: Position )
- 在
build.gradle.kts中调整noarg插件配置:
noArg { // 原有JPA注解配置保留 annotation("javax.persistence.Entity") // 新增自定义注解配置,替换为你实际的注解包路径 annotation("com.your.package.name.NoArg") }
配置完成后重新编译即可。
内容的提问来源于stack exchange,提问作者xetra11
相关产品推荐
相关产品推荐

