Spring Boot的JPA / Hibernate複合主鍵示例

2021-01-11 NewCloud

本文是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注釋實現複合主鍵。

相關焦點

  • 一文搞懂 Spring JPA
    了解了什麼是 JPA,我們來看看本文的主角——spring data jpa。spring data jpaSpring Data JPA 是 Spring 基於 ORM 框架、JPA 規範的基礎上封裝的一套 JPA 應用框架,底層使用了 Hibernate 的 JPA 技術實現,可使開發者用極簡的代碼即可實現對數據的訪問和操作。
  • 詳述 Spring Data JPA 的那些事兒
    當然本文並不是捧吹 spring data jpa , 另一個資料庫層的框架 mybatis 也是十分優秀的框架,該框架是專注 sql 語句的.spring data jpa常用的 jpa 的配置下面所有演示的代碼均來自我個人 github 的 spring-data-jpa 倉庫,倉庫地址:https://github.com/kickcodeman/spring-data-jpa, 讀者可以clone
  • Spring Data JPA 就是這麼簡單
    spring data jpa常用的 jpa 的配置下面所有演示的代碼均來自我個人 github 的 spring-data-jpa 倉庫,倉庫地址:https://github.com/kickcodeman/spring-data-jpa, 讀者可以clone 下來運行本項目,驗證下面講的所有知識點。
  • 一文搞懂如何在Spring Boot 正確中使用JPA
    ;artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId>
  • Hibernate5 與 Spring Boot2 最佳性能實踐(2)
    技術要點`@ElementCollection` 未設置主鍵`@ElementCollection` 映射到獨立的資料庫表需要頻繁插入、刪除操作時,使用 `@ElementCollection` 同時加上 `@OrderColumn`在數據表開始的地方,執行插入或移除記錄越多性能損失越大示例輸出
  • 深入 JVM 分析 spring-boot 應用 hibernate-validatorNoClassDefFoundError
    /問題可重現的Demo代碼:demo.ziphttp://hengyunabc.github.io/img/demo.zip最近排查一個spring boot應用拋出hibernate.validator NoClassDefFoundError的問題,異常信息如下:Caused by: java.lang.NoClassDefFoundError
  • Spring Boot 實現RESTful webservice服務端示例
    createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true username: root password: 123456 jpa: hibernate: ddl-auto
  • SpringBoot(五) :spring data jpa 的使用
    的使用.html如有好文章投稿,請點擊 → 這裡了解詳情在上篇文章《 springboot(二):web綜合開發 》中簡單介紹了一下spring data jpa的基礎性使用,這篇文章將更加全面的介紹spring data jpa 常見用法以及注意事項。
  • springboot(五):spring data jpa的使用
    在上篇文章springboot(二):web綜合開發中簡單介紹了一下spring data jpa的基礎性使用,這篇文章將更加全面的介紹spring
  • springboot+jpa+thymeleaf實現信息增刪改查功能
    15 00:00:00', '阿牛哥', '2020-05-27 17:11:39', '阿牛哥', '阿牛哥');COMMIT;SET FOREIGN_KEY_CHECKS = 1;pox.xml <dependency> <groupId>org.springframework.boot
  • MyBatis JPA Extra,MyBatis JPA 擴展 v2.2 發布
    MyBatis JPA ExtraMyBatis JPA Extra對MyBatis進行了JPA擴展,旨在基於JPA 2.1的注釋簡化對單表CUID操作,根據JPA注釋動態生成SQL語句;使用Interceptor實現資料庫SELECT分頁查詢,適配多種資料庫;另外提供mybatis-jpa-extra-spring-boot-starter
  • Spring Boot 和 Spring 到底有啥區別?
    Web應用程式:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>2.0.6.RELEASE<
  • Spring Boot 採用Sharding-JDBC 實現Mybaits的分庫分表功能
    </groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId>
  • Spring Boot2.2.2整合H2和MySQL自由切換數據源
    </groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.2.RELEASE</version> <relativePath/> <!
  • 如何在 Spring/Spring Boot 中做參數校驗?你需要了解的都在這裡!
    基礎設施搭建相關依賴如果開發普通 Java 程序的的話,你需要可能需要像下面這樣依賴: <dependency> <groupId>org.hibernate.validator</groupId> <artifactId>hibernate-validator
  • Spring Cloud Config新手教程及源碼分析
    今天,小編為大家帶來小火同學投稿的《Spring Cloud Config 新手教程及源碼分析》,本文用示例細緻的講解了Spring Cloud Config的使用步驟和方法,並且給出了部分源碼分析。        叮~~~!一起來聽課吧!
  • Spring 和 Spring Boot 之間到底有啥區別?
    ><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.0.6.RELEASE</version></dependency
  • Spring Boot集成validation用於優雅的校驗API參數的合法性
    validation主要是校驗用戶提交的數據的合法性,比如是否為空,密碼是否符合規則,郵箱格式是否正確等等,校驗框架比較多,用的比較多的是hibernate-validator, 也支持國際化,也可以自定義校驗類型的註解,這裡只是簡單的演示校驗框架在Spring Boot中的簡單集成
  • 為啥國人喜歡Mybatis,而老外偏愛 Hibernate/JPA 呢?
    認為寫 SQL 不優雅,用 jpa 的核心是讓我們關注對象建模,而不是關心底層資料庫映射。只有你在考慮數據和行為在一起的充血模型、貼身職責,聚合根狀態變遷,值對象不變性的情況下,你才會發現 jpa 給你提供了很多便利,根本不需要關注底層存儲模型。在複雜的邏輯、超長的軟體生命周期。使用 DDD 的設計方法是目前看比較合理的選擇,維護的成本比較低。