Почему при добавлении столбца все строки получают значение null? - PullRequest
0 голосов
/ 04 января 2019

Я пытаюсь добавить новый столбец в существующую таблицу. Ожидается, что UNKNOWN вместо этого все строки получают значение NULL. Пожалуйста помоги. Вот мой код.

Grade.kt

package com.example.demo.model

import javax.persistence.*

@Entity
class Grade {
    @GeneratedValue
    @Id
    var id: Long? = null
    var grade: Int? = null
    var name: String? = null
    var enabled: Boolean = false
    @Enumerated(EnumType.STRING)
    var studentStatus: StudentStatus = StudentStatus.UNKNOWN

}

Сначала я создал эту таблицу без studentStatus. Теперь я хочу добавить к таблице studentStatus var и обнаружил, что должен объявить его в Gradle.kt для StudentStatus.UNKNOW, но вместо этого он становится нулевым.

StudentStatus.kt

package com.example.demo.model

enum class StudentStatus{
    PASS,
    FAIL,
    UNKNOWN
}

GradleRepository.kt

package com.example.demo.repository

import com.example.demo.model.Grade
import org.springframework.data.repository.CrudRepository

interface GradeRepository : CrudRepository<Grade, Long>

build.gradle

buildscript {
    ext {
        kotlinVersion = '1.2.71'
        springBootVersion = '2.1.1.RELEASE'
    }
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
        classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:${kotlinVersion}")
        classpath("org.jetbrains.kotlin:kotlin-allopen:${kotlinVersion}")
        classpath("org.jetbrains.kotlin:kotlin-noarg:${kotlinVersion}")
    }
}

apply plugin: 'kotlin'
apply plugin: 'kotlin-spring'
apply plugin: 'kotlin-jpa'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'

group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8
compileKotlin {
    kotlinOptions {
        freeCompilerArgs = ["-Xjsr305=strict"]
        jvmTarget = "1.8"
    }
}
compileTestKotlin {
    kotlinOptions {
        freeCompilerArgs = ["-Xjsr305=strict"]
        jvmTarget = "1.8"
    }
}

repositories {
    mavenCentral()
}


dependencies {
    implementation('org.springframework.boot:spring-boot-starter-data-jpa')
    implementation('org.springframework.boot:spring-boot-starter-mustache')
    implementation('org.springframework.boot:spring-boot-starter-web')
    implementation('com.fasterxml.jackson.module:jackson-module-kotlin')
    implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
    implementation("org.jetbrains.kotlin:kotlin-reflect")
    runtimeOnly('com.h2database:h2')
    runtimeOnly('mysql:mysql-connector-java')
    testImplementation('org.springframework.boot:spring-boot-starter-test')
}

1 Ответ

0 голосов
/ 05 января 2019

Hibernate может добавить новый столбец в существующую таблицу, когда вы определяете дополнительный атрибут в своем классе. Но Hibernate не будет автоматически переносить существующие значения / строки.

Для этого случая вы должны использовать инструмент миграции базы данных, такой как Liquibase или Flyway . Spring Boot поддерживает оба . Эти инструменты помогут вам написать миграцию, которая будет превышена один раз при следующем запуске приложения, обновите существующие записи в вашей базе данных с отсутствующими значениями.

Я предполагаю, что у вас проблема только с существующими значениями, так как определенное значение по умолчанию выглядит корректно для новых вставленных значений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...