Hibernate/JPA中@OneToOne和@MapsId的使用
雙向@OneToOne的效率低於與父表共享主鍵的單向@OneToOne。因此,不要使用雙向@OneToOne,最好是依靠單向@OneToOne和@MapsId。
第一步:在子實體這邊使用@MapsId
@Entity public class Desk implements Serializable { private static final long serialVersionUID = 1L; @Id private Long id; @OneToOne(fetch = FetchType.LAZY) @MapsId private Employee employee; |
基本上,上面@OneToOne關聯,它將與父表共享主鍵,父實體見如下,父實體中沒有@OneToOne,這說明是從子實體指向父實體的單向關聯:
@Entity public class Employee implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } } |
原始碼可以在這裡找到 。
如果使用DDD聚合設計,Desk和Employee誰是聚合根?無論誰是聚合根,都是聚合根實體要指向引用子實體,這時會與JPA的設計有衝突,需要權衡業務設計和效能的平衡。
相關文章
- 使用Hibernate、JPA、Lombok遇到的有趣問題Lombok
- 如何在SpringBoot中使用Hibernate/JPA的@NaturalId?Spring Boot
- JPA與hibernate-------JPA01
- 使用JPA和Hibernate呼叫儲存過程的最佳方法 - Vlad Mihalcea儲存過程
- 如何使用Hibernate/JPA的JPQL/HQL查詢提取?
- Hibernate/JPA中避免save()冗餘呼叫
- 如何在Hibernate/JPA的實體和查詢中使用Java 8 Optional?Java
- JPA和Hibernate的樂觀鎖與悲觀鎖
- Hibernate/JPA中如何合併實體集合?
- 使用JPA和Hibernate延遲載入實體屬性的最佳方法 - Vlad Mihalcea
- 淺談JPA二:聊聊Hibernate
- SpringBoot 中 JPA 的使用Spring Boot
- Oracle資料庫與JPA和Hibernate 結合使用時的九個高效能技巧 - vladmihalceaOracle資料庫
- 【SpringBoot Demo】MySQL + JPA + Hibernate + Springboot + Maven DemoSpring BootMySqlMaven
- 如何透過Hibernate/JPA在MySQL中儲存UTC時區?MySql
- @OneToOne、@ManyToOne的具體使用與區別
- JPA中@ElementCollection使用
- 解鎖你的資料庫:JPA和Hibernate的樂觀鎖與悲觀鎖資料庫
- 如何透過Hibernate/JPA的SqlResultSetMapping生成需要資料的DTO?SQLAPP
- 多年教訓:根據DDD設計原則改變JPA/Hibernate的使用方式 - lorenzo
- Hibernate/JPA如何保證不生成多餘的SQL語句?SQL
- hibernate在JPA規範中在控制檯無法出現SQL語句SQL
- 如何在Hibernate/JPA中配置具有兩個連線池的兩個資料來源
- 列舉型別在JPA中的使用型別
- 解決Spring Data JPA Hibernate的N+1問題的最佳方法Spring
- hibernate使用
- 在Hibernate中關於Oracle sequence的使用KHOracle
- hibernate及SpringBoot整合Jpa實現對資料庫操作Spring Boot資料庫
- Hibernate之SchemaExport的使用Export
- 學習Hibernate5 JPA這一篇就夠了
- Spring Data JPA 的使用Spring
- Spring Data JPA系列2:SpringBoot整合JPA詳細教程,快速在專案中熟練使用JPASpring Boot
- 使用 Drools 和 JPA & Drools show case in docker hubDocker
- Hibernate-ORM:13.Hibernate中的連線查詢ORM
- hibernate中的no session問題Session
- Hibernate中的cascade與inverse
- 為啥國人偏愛Mybatis,而老外喜歡Hibernate/JPA呢?MyBatis
- SpringBoot使用JPASpring Boot