[英]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.