本文是JPA註解 @Embeddable和@EmbeddedId和複合主鍵的示例。
假設我們有一個應用程式來管理各個公司的員工。每個員工在公司內都有一個獨特的員工。但同樣的員工也可以出現在其他公司中,所以我們不能僅僅通過他的員工身份來識別員工。
要唯一地識別員工,我們需要知道他的employeeId和companyId兩者。查看下Employees表,其中包含一個包含employeeId和companyId列的複合主鍵 。
創建項目
您可以使用Spring Boot CLI快速生成項目,方法是在終端中鍵入以下命令 -
完整項目目錄結構
配置資料庫和休眠日誌級別
讓我們在src/main/resources/application.properties文件中添加MySQL資料庫URL,用戶名和密碼配置-
除了MySQL資料庫配置,我還指定了hibernate日誌級別和其他屬性。
該屬性spring.jpa.hibernate.ddl-auto = update使應用程式中的實體類型和映射的資料庫表保持同步。每當更新域實體時,下次重新啟動應用程式時,資料庫中相應的映射表也將更新。
這非常適合開發,因為您不需要手動創建或更新表。它們將根據應用程式中的Entity類自動創建/更新。
在繼續下一部分之前,請確保根據MySQL安裝創建一個名為的MySQL資料庫,jpa_composite_pk_demo並更改spring.datasource.username和spring.datasource.password屬性。
定義域模型
在hibernate中使用Embeddable類型映射複合主鍵。我們將首先創建一個名為EmployeeIdentity包含employeeId和companyId欄位的Embeddable類型,然後創建Employee將嵌入該EmployeeIdentity類型的實體。
創建一個名為modelinside com.example.jpapackage 的新包,然後在包中添加以下類model-
1.員工身份 - 可嵌入類型
2.員工 - 域模型
在Employee類中,我們使用@EmbeddedId注釋來嵌入EmployeeIdentity類型並將其標記為主鍵。
創建存儲庫
接下來,讓我們創建用於Employee從資料庫訪問數據的存儲庫。首先,創建一個名為repositoryinside com.example.jpapackage 的新包,然後在包中添加以下接口repository-
用於測試複合主鍵映射的代碼
最後,讓我們編寫一些代碼來測試複合主鍵映射。打開主類JpaCompositePrimaryKeyDemoApplication.java並用以下代碼替換它 -
我們首先清理Employee表,然後插入一個帶有employeeId和companyId的新Employee記錄來測試設置。
您可以通過mvn spring-boot:run從項目的根目錄鍵入來運行該應用程式。Employee應用程式成功啟動後,記錄將插入資料庫中。
使用複合主鍵查詢
現在讓我們看一些使用複合主鍵的查詢示例 -
1.使用複合主鍵檢索員工 - (employeeId和companyId)
2.檢索特定公司的所有員工
假設您想要通過companyId檢索公司的所有員工。為此,只需在EmployeeRepository界面中添加以下方法即可。
就這樣!你不需要實現任何東西。Spring Data JPA將使用方法名稱動態生成查詢。您可以在主類中使用上述方法來檢索像這樣的公司的所有員工 -
結論
以上就是如何在hibernate中使用@Embeddable和@EmbeddedId注釋實現複合主鍵。