今天我們的任務是完成關於 Hibernate 主題的第二個項目。它的本質是了解數據庫的結構,將實體映射到現有表,並添加最少的功能來檢查映射是否正確完成。
現在更詳細:
- 下載轉儲文件並將其部署到本地計算機。作為數據庫,我們將使用一個測試數據庫,該數據庫作為示例隨MySQL安裝包一起分發。為了修復數據庫的狀態,需要轉儲,因為我們不能保證它不會在一天、一個月、一年內發生變化。
- 我們不會有項目模板,因此請自行創建項目。它應該是一個具有所有必需依賴項(hibernate-core-jakarta、mysql-connector-java、p6spy)的 Maven 項目。
- 在Idea中插入我們本地部署的數據庫作為數據源。之後,在“數據庫”選項卡中,將光標放在電影模式上並按下組合鍵
Alt+Ctrl+Shift+U
(僅適用於終極版)。這將顯示整個電影模式的結構(包括列名、鍵等)。看起來像這樣:我同意,看著不是很舒服。關閉所有欄目和評論標題的顯示:
結果,您將獲得一個可以分析的數據庫模式:
- 電路看起來很複雜,但並非一切都那麼糟糕。要分析數據庫的結構,您需要找到從哪裡開始。沒有單一的正確答案,但我建議從表格開始
film
。我們以幾個關係為例:film
表和之間的關係film_text
是顯式一對一關係,因為表film_text
有一個film_id
字段不是指的是表中的IDfilm
(無外鍵)。但從名稱和邏輯上看,這種聯繫應該是。另外,在表中,film_text
該字段film_id
作為主鍵,保證了一個“電影”對應的“電影文本”不超過一個。- 現在讓我們看看表
film
和category
。從邏輯上講,一部電影可以有幾個類別。一個類別,也許是不同的電影。此外,這兩個表之間還有一個中間鏈接表film_category
。基於以上所有內容,這是一個顯式的ManyToMany關係。 - 我們看表
film
和language
。從邏輯上看,電影可能有不同語言的翻譯,不同的電影可能是同一種語言。也就是說,ManyToMany暗示自己。但是如果我們查看表格的內容film
,我們可以看到表格的每一行都是一部獨特的電影。並且該行只有一個language_id字段(也有original_language_id,但是在所有記錄中都是null,可以忽略)。也就是說,一部電影只能有一種語言。一種語言,也許是不同的電影。連接是ManyToOne(連接是從電影到語言)。
- 現在的主要任務是創建所有必要的實體類並將它們映射到模式表中
movie
。 - 添加一個方法,可以創建一個具有所有依賴字段的新客戶(客戶表)。不要忘記使該方法具有事務性(以免出現買家地址記錄在數據庫中但買家本人沒有的情況)。
- 添加描述“客戶去並歸還以前租借的電影”事件的交易方法。選擇您選擇的任何買家和租賃活動。電影的評分不需要重新計算。
- 添加一個描述事件“買家去了商店(store)並在那裡租用(rental)存貨(inventory)”的交易方法。同時,他向賣家(工作人員)支付了一筆款項(付款)。電影(通過庫存)自行選擇。唯一的限制是影片必須可供出租。即要么rental中根本沒有存貨記錄,要么填入該存貨最後一次出租的表的return_date列。
rental
- 添加一個描述事件“一部新電影被拍攝並且可以出租”的交易方法。電影、語言、演員、類別等,隨意選擇。
- 無法更改表結構。但是你需要提出改進建議。我們在第 4 段中確定了一個有問題的地方(表字段上的表中缺少外鍵)。看看數據庫結構中是否還有這樣的“失誤”。如果是這樣,請將自述文件添加到項目的根目錄並描述這些錯誤。
film_text
film_id
film
項目分析: