Ошибка: получатели ленивых классов не могут быть окончательными Kotlin Spring Boot - PullRequest
0 голосов
/ 12 января 2020

Я пытаюсь создать REST Spring Boot Server на Kotlin. Я использовал базу данных - сначала и автоматически генерируемые сущности, используя встроенный инструмент Intellij. При запуске сервера всплывающая ошибка:

2020-01-12 15:09:14.387 ERROR 23016 --- [  restartedMain] o.h.tuple.entity.PojoEntityTuplizer      : HHH000112: Getters of lazy classes cannot be final: ru.madbrains.smartfridgemanager.server.model.MealplanEntity.name
2020-01-12 15:09:14.391 ERROR 23016 --- [  restartedMain] o.h.tuple.entity.PojoEntityTuplizer      : HHH000243: Setters of lazy classes cannot be final: ru.madbrains.smartfridgemanager.server.model.MealplanEntity.name
2020-01-12 15:09:14.391 ERROR 23016 --- [  restartedMain] o.h.tuple.entity.PojoEntityTuplizer      : HHH000112: Getters of lazy classes cannot be final: ru.madbrains.smartfridgemanager.server.model.MealplanEntity.refRecipeEntities
2020-01-12 15:09:14.391 ERROR 23016 --- [  restartedMain] o.h.tuple.entity.PojoEntityTuplizer      : HHH000243: Setters of lazy classes cannot be final: ru.madbrains.smartfridgemanager.server.model.MealplanEntity.refRecipeEntities

Моя сущность:

import javax.persistence.*

@Entity
@Table(name = "mealplan", schema = "public", catalog = "smartfridgemanagerdatabase")
open class MealplanEntity {
    @get:Id
    @get:Column(name = "id", nullable = false, insertable = false, updatable = false)
    var id: Int? = null
    @get:Basic
    @get:Column(name = "name", nullable = true)
    var name: Int? = null

    @get:OneToMany(mappedBy = "refMealplanEntity")
    var refRecipeEntities: List<RecipeEntity>? = null

    override fun toString(): String =
            "Entity of type: ${javaClass.name} ( " +
                    "id = $id " +
                    "name = $name " +
                    ")"

    // constant value returned to avoid entity inequality to itself before and after it's update/merge
    override fun hashCode(): Int = 42

    override fun equals(other: Any?): Boolean {
        if (this === other) return true
        if (javaClass != other?.javaClass) return false
        other as MealplanEntity

        if (id != other.id) return false
        if (name != other.name) return false

        return true
    }
}

В чем дело?

Редактировать 1: Мой файл build.gradle.kts : (было сгенерировано с использованием Spring Initializr - start.spring.io)

import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins {
    id("org.springframework.boot") version "2.2.2.RELEASE"
    id("io.spring.dependency-management") version "1.0.8.RELEASE"
    kotlin("jvm") version "1.3.61"
    kotlin("plugin.spring") version "1.3.61"
    kotlin("plugin.jpa") version "1.3.61"
}

group = "ru.madbrains.smartfridgemanager"
version = "0.0.1-SNAPSHOT"
java.sourceCompatibility = JavaVersion.VERSION_1_8

val developmentOnly by configurations.creating
configurations {
    runtimeClasspath {
        extendsFrom(developmentOnly)
    }
}

repositories {
    mavenCentral()
}

dependencies {
    implementation("org.springframework.boot:spring-boot-starter-data-jpa")
    implementation("org.springframework.boot:spring-boot-starter-security")
    implementation("org.springframework.security.oauth.boot:spring-security-oauth2-autoconfigure:2.0.0.RELEASE")
    implementation("org.springframework.boot:spring-boot-starter-web")
    implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
    implementation("org.jetbrains.kotlin:kotlin-reflect")
    implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
    implementation("org.postgresql:postgresql")
    implementation("io.jsonwebtoken:jjwt:0.9.1")
    developmentOnly("org.springframework.boot:spring-boot-devtools")
}

tasks.withType<KotlinCompile> {
    kotlinOptions {
        freeCompilerArgs = listOf("-Xjsr305=strict")
        jvmTarget = "1.8"
    }
}

1 Ответ

2 голосов
/ 19 марта 2020

Добавление атрибута open к свойствам решило проблему для меня. Например,

open var name: Int? = null
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...