簡體   English   中英

Spring Data - H2 內存數據庫,延遲加載及其工作原理

[英]Spring Data - H2 in-memory database, lazy-loading and how it works

H2 數據庫可以完全在內存模式下工作 - 數據存儲在 RAM 中而不是磁盤空間中,沒有 I/O 操作,更好的性能等(據我所知)。 讓我們考慮下一個簡單的實體。

@Entity
@Table(name = "USER")
public class User {

    @Id
    @GeneratedValue
    @Column(name = "USER_ID")
    private Long userId;

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "user")
    private Set<OrderDetail> orderDetail = new HashSet();
} 

使用標准 JpaRepository 我們可以將它保存在內存中並執行其他 CRUD 操作。 然而,為了檢索已經保存的依賴於其他實體的實體(用戶的 orderDetail),我們仍然需要使用 fetch graph、JPQL join 語句、在事務中訪問它或直接指向集合獲取類型來急切地加載它。 當我們面臨多個依賴關系時,情況會變得更糟,這會導致使用實體圖進行急切獲取時的 n+1 或笛卡爾積。

據我了解,既然實體存儲在內存中,為什么它不允許在一次調用中加載具有所有嵌套關系的整個實體圖? 這不只是關於存儲相關實體的引用嗎?

為什么它不允許在一次調用中加載具有所有嵌套關系的整個實體圖?

因為 JPA 使用 JDBC 與任何數據庫通信,並且不關心數據庫是否將數據存儲在內存、磁盤、閃存驅動器或石板上。 此外,僅僅因為內存數據庫不將其數據存儲在某些持久存儲上,並不意味着訪問其中的數據是免費的。 您仍然必須根據存儲的數據構造對象。

當然,您始終可以使用例如 HashMap 或類似數據結構將對象直接存儲在內存中,而無需任何轉換,基本上只是作為參考。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM