我有一个带有数据库的Spring Boot Kotlin项目。我有使用嵌入式数据库的JUnit测试。
这是我要测试的@Entity
@Entity
@Table(name = "client")
data class Client(
@Id
@Column(name = "id")
val id: UUID,
@Column(name = "modified_on")
var modifiedOn: OffsetDateTime = OffsetDateTime.now(),
)
当我使用gradle(./gradlew clean test
)运行测试时,测试成功。
当我通过IntelliJ运行测试(右键单击>运行所有测试)时,出现错误:
org.springframework.orm.jpa.JpaSystemException: No default constructor for entity
docs on the Kotlin website很清楚-使用插件“ kotlin-jpa”将自动为带有@Entity
注释的类创建无参数构造函数。
如果我转到项目结构>构面> Kotlin> Kotlin主程序或测试>编译器插件,则可以看到两个插件:kotlin-allopen和kotlin-noarg。它们似乎配置正确,并且kotlin-noarg指定@Entity
。
我已经在build.gradle中指定了插件
plugins {
id 'org.springframework.boot' version '2.1.4.RELEASE'
id 'org.jetbrains.kotlin.jvm' version '1.3.41'
id 'org.jetbrains.kotlin.plugin.spring' version '1.3.41'
// kotlin-jpa plugin allows no-arg constructors, e.g. on @Entity
id 'org.jetbrains.kotlin.plugin.jpa' version '1.3.41'
}
我如何获得依赖于kotlin-noarg插件才能在IntelliJ中运行的JUnit测试?
相关:
这些没有分辨率。它们也不特定于JUnit和IntelliJ,否则插件可以正常工作。
这里的分辨率不起作用。
答案 0 :(得分:1)
我的问题是尝试使用 Kotlin 的新 IR 后端:
tasks.withType<KotlinCompile> {
kotlinOptions {
jvmTarget = "1.8"
useIR = true
}
}
删除 useIR = true
解决了插件问题