首先從常常讓人一頭霧水的名詞開始,ORM
, JPA
, Spring Data JPA
, Hibernate
ORM
: Object Relational Mapping,這是抽象概念,沒法直接使用,上述名詞通通都涵蓋在這之中Hibernate
: Java 目前最大宗的 ORM framework,裡頭包含了部分滿足 JPA 規範的方法,額外也有自己添加一些不在規範內的強大功能。JPA
: 全名是 Java Persistence API,這只一個規範(它不包含任何實作方法),Hibernate
正是 JPA Provider 其中之一,當今天我們使用這些遵守 JPA 規範的 JAVA ORM Framework,未來就可以更容易地在這些 JPA Implementation 中自在地切換 (Hibernate
<==> EclipseLink
)Spring Data JPA
:是在 JPA 之上的一個插件,將這些介面又封裝的更容易使用。開始談論 N+1 Problem 之前,必須要知道的就是,如果把 Hibernate
或是 EclipseLink
從專案中移除,不管你用的是 JPA 還是 Spring Data JPA,所有的查詢功能都會馬上失效。
如果只透過 JPA 規範中所提及的方法,就無法發揮這些 ORM Framework 自己獨立於規範外的額外功能,但換來的是未來做工具替換時的方便。