You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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插件的扫描范围,再给父类标注该注解:

  1. 首先创建自定义注解:
annotation class NoArg
  1. 给GameEntity类添加该注解:
@NoArg
open class GameEntity(
    val position: Position
)
  1. 在build.gradle.kts中调整noarg插件配置:
noArg {
    // 原有JPA注解配置保留
    annotation("javax.persistence.Entity")
    // 新增自定义注解配置,替换为你实际的注解包路径
    annotation("com.your.package.name.NoArg")
}

配置完成后重新编译即可。

内容的提问来源于stack exchange,提问作者xetra11

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 08:24:04