spring data jpa hibernate jpa 三者之間的關係
JPA規範與ORM框架之間的關係是怎樣的呢?
JPA規範本質上就是一種ORM規範,注意不是ORM框架——因為JPA並未提供ORM實現,它只是制訂了一些規範,提供了一些程式設計的API介面,但具體實現則由服務廠商來提供實現,JBoss應用伺服器底層就以Hibernate作為JPA的實現。
既然JPA作為一種規範——也就說JPA規範中提供的只是一些介面,顯然介面不能直接拿來使用。雖然應用程式可以面向介面程式設計,但JPA底層一定需要某種JPA實現,否則JPA依然無法使用。
從筆者的視角來看,Sun之所以提出JPA規範,其目的是以官方的身份來統一各種ORM框架的規範,包括著名的Hibernate、TopLink等。不過JPA規範給開發者帶來了福音:開發者面向JPA規範的介面,但底層的JPA實現可以任意切換:覺得Hibernate好的,可以選擇Hibernate JPA實現;覺得TopLink好的,可以選擇TopLink JPA實現……這樣開發者可以避免為使用Hibernate學習一套ORM框架,為使用TopLink又要再學習一套ORM框架。
下圖是JPA和Hibernate、TopLink等ORM框架之間的關係:
JPA規範與ORM框架之間的關係
JPA和Hibernate的關係就像JDBC和JDBC驅動的關係,JPA是規範,Hibernate除了作為ORM框架之外,它也是一種JPA實現。JPA怎麼取代Hibernate呢?JDBC可以驅動JDBC驅動嗎?那麼Spring Data JPA與JPA規範的關係是怎樣的呢?
一下回復的原話的重要部分:
Implementing a data access layer of an application has been cumbersome for quite a while. Too much boilerplate code had to be written. Domain classes were anemic and haven't been designed in a real object oriented or domain driven manner.