究竟什么是 ORM, JPA, Spring Data JPA, Hibernate
首先从常常让人一头雾水的名词开始,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 自己独立于规範外的额外功能,但换来的是未来做工具替换时的方便。