iT邦幫忙

2021 iThome 鐵人賽

DAY 11
0

vok-orm 刪除關連資料

由於 vok-orm 非 JPA、Hibernate 那一類的框架,查詢也好刪除也好,並不會有一連串的關連式資料的連動作業。筆者個人對這樣的方式是非常偏好的,從資料表的建立到查詢、資料刪除,都不會有看不到的背景執行作業。

一般而言,刪除主表必需連同副表一併刪除。在本例中學生資料是主表,學生成績為副表,剛除學生時,學生成績必需一併刪除。

刪除副表

請打開 GradeViewComponent.kt,在原來的表格最後加上刪除 按鍵

    Student.getById(studentId).grades.fetch().forEach {grade ->
        grades.apply {
            div("table") {
                div("tr") {
                    div("td") { label("${grade.description}") }
                    div("td") { label("${grade.mandarin}") }
                    div("td") { label("${grade.english}") }
                    div("td") { label("${grade.math}") }
                    div("td") { label("${grade.pe}") }
                    button("刪除"){
                        addThemeVariants(ButtonVariant.LUMO_TERTIARY, ButtonVariant.LUMO_SMALL )
                        onLeftClick { grade.delete(); refresh() }
                    }
                }

            }

        }
    }

執行結果如下

https://ithelp.ithome.com.tw/upload/images/20210926/2013868047VPDL3kcq.png

刪除主表

請打開Student.kt,複寫delete()方法

    override fun delete() {
        Grade.deleteBy { Grade::student_id eq id }
        super.delete()
    }

當主表刪除時須連帶刪除附表,這裡複寫Student 的delete()方法,在刪除學生資料前先刪除成績資料。


上一篇
VoK 整合式登入 - day10
下一篇
提供 REST API / 限定欄位 / 格式化LocalDate - day12
系列文
使用 Kotlin 快速開發 Web 程式 -- Vaadin30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言