【问题标题】:How to store enum data as Array List in a database using Kotlin如何使用 Kotlin 将枚举数据作为数组列表存储在数据库中
【发布时间】:2022-01-04 07:05:30
【问题描述】:

我有一个包含多个数据的枚举类,我想存储它 枚举数据作为数据库中的列表。例如它包含的 Developer 表 技术列,该列存储枚举数据,假设一个用户想要 存储 Developer1 从事许多技术,如 java 、 Kotllin 、 .Net等这些技术属于枚举类,如何存储 . 与我有一个包含多个主题名称的主题枚举类相同 ,当我注册一位新老师时,我想存储多少科目 老师知道,如果他知道我们枚举中存在的多个科目 班级列表然后存储老师知道的科目ID。但是我 无法在 subjectId 的单个列中存储多个数据,它 在 SubjectId 列中只存储一个数据,如果我传入多个数据 postman 中的 subjectId 列会引发错误 400 教师实体类

package com.nilmani.jpqlprojectexample.entity

import com.nilmani.jpqlprojectexample.enum.Subject
import com.nilmani.jpqlprojectexample.enum.University
import java.util.*
import javax.persistence.Entity
import javax.persistence.GeneratedValue
import javax.persistence.GenerationType
import javax.persistence.Id

@Entity
data class Teacher(
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    val id:Long=-1,
    val nameOfTeacher:String="",
    val price:Long=-1,
    val subject:Int = Subject.MATH.type,//List<Int> = listOf(Subject.MATH.type)
    val university:Int=University.OTHER.type
)

主题枚举类

package com.nilmani.jpqlprojectexample.enum

enum class Subject(val type:Int) {
    MATH(1),
    PHYSIC(2),
    ACCOUNTING(3),
    ZOOLOGY(4),
    BIOLOGY(5),
    PROGRAMMING(6),
    STATICS(7),
    CHEMISTRY(8),
    HISTORY(9)
}

ReqTeacher 模型类

package com.nilmani.jpqlprojectexample.model.request

import com.nilmani.jpqlprojectexample.enum.Subject import com.nilmani.jpqlprojectexample.enum.University

data class ReqTeacher(
    val nameOfTeacher:String="",
    val price:Long=-1,
    val subject:Int= Subject.MATH.type,
    val university:Int= University.OTHER.type, )

响应教师示范课

package com.nilmani.jpqlprojectexample.model.response

import com.nilmani.jpqlprojectexample.enum.Subject
import com.nilmani.jpqlprojectexample.enum.University

data class ResTeacher(
    val nameOfTeacher:String="",
    val price:Long=-1,
    val subject:Int= Subject.MATH.type,
    val university:Int= University.OTHER.type,
)

教师控制器类

package com.nilmani.jpqlprojectexample.controller

import com.nilmani.jpqlprojectexample.entity.Teacher
import com.nilmani.jpqlprojectexample.model.request.ReqTeacher
import com.nilmani.jpqlprojectexample.model.response.ResTeacher
import com.nilmani.jpqlprojectexample.repository.TeacherRepository
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.http.HttpStatus
import org.springframework.http.ResponseEntity
import org.springframework.web.bind.annotation.*

@RestController
@RequestMapping("/teachTest")
class TeacherController {
    @Autowired
    private lateinit var teachRopo:TeacherRepository

    @PostMapping("/add")
    fun addTeacher(@ModelAttribute request:ReqTeacher):ResponseEntity<*>{
//        val newTeacher = teachRopo.findById(request.)
        var newTeacher = Teacher(
            nameOfTeacher = request.nameOfTeacher,
            price = request.price,
            subject = request.subject,
            university = request.university,
        )
        val saveTeacher = teachRopo.save(newTeacher)
        val respTeacher = ResTeacher(
            saveTeacher.nameOfTeacher,
            saveTeacher.price,
            saveTeacher.subject,
            saveTeacher.university
        )
        return ResponseEntity(respTeacher,HttpStatus.OK)
    }
}

我想在一个对象的 SubjectId 列中存储多个数据或单个数据 特定的teacherId,但我的代码只存储一个特定的数据 教师编号

【问题讨论】:

    标签: spring-boot kotlin spring-data-jpa


    【解决方案1】:

    您应该有一个新表(实体),它表示教师和主题之间的一对多关系,例如teacher_subject。这是正确的做法。如果您尝试将主题作为空格/逗号分隔的值存储在单个单元格中,例如“数学、物理、生物”那将是不好的做法。

    【讨论】:

    • Subject 不是实体类,它只是一个枚举类,如何在 Teacher 实体类和 Subject 枚举类之间建立一对多关系
    • 我在使用 @ElementCollection@CollectionTable 的 SO 上找到了这个答案:stackoverflow.com/a/3153172/9698467
    猜你喜欢
    • 1970-01-01
    • 2011-09-05
    • 1970-01-01
    • 2017-12-08
    • 1970-01-01
    • 2019-10-02
    • 1970-01-01
    • 2023-03-07
    • 2016-01-01
    相关资源
    最近更新 更多