kotlin-jpa插件未为Junit测试创建空的构造函数

时间:2019-07-04 13:42:27

标签: intellij-idea kotlin junit

我有一个带有数据库的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,否则插件可以正常工作。

这里的分辨率不起作用。

1 个答案:

答案 0 :(得分:1)

我的问题是尝试使用 Kotlin 的新 IR 后端:

tasks.withType<KotlinCompile> {
        kotlinOptions { 
            jvmTarget = "1.8"
            useIR = true
        }
    }

删除 useIR = true 解决了插件问题