JPA กับ Spring Data JPA แตกต่างกันอย่างไร


144

ฉันสับสนเล็กน้อยเกี่ยวกับความแตกต่างระหว่าง Spring Data-JPA และ JPA ฉันรู้เกี่ยวกับ JPA ว่าเป็นข้อมูลจำเพาะสำหรับการคง Java Objects ให้กับฐานข้อมูลเชิงสัมพันธ์โดยใช้เทคโนโลยี ORM ที่เป็นที่นิยม

กล่าวอีกนัยหนึ่ง JPA ให้บริการอินเทอร์เฟซและเทคโนโลยี ORM อื่น ๆ ใช้อินเทอร์เฟซที่รู้จักในฐานะผู้ให้บริการ JPA เช่นไฮเบอร์เนต

ตอนนี้ Spring Data JPA คืออะไร?

Spring Data JPA ได้เพิ่มฟังก์ชั่นเพิ่มเติม (การเชื่อมต่อ) ผ่าน JPA และยังคงมีการระบุไว้เท่านั้นหรือเป็นผู้ให้บริการ JPA ด้วยหรือไม่

ฉันเห็น Spring Data JPA ทำงานได้กับที่เก็บข้อมูล (เลเยอร์ DAO: ถ้าฉันไม่ผิด) ดังนั้นฉันหมายความว่ามันแตกต่างกันอย่างไรเมื่อใช้ 'Spring Data JPA + Hibernate' หรือใช้การกำกับ 'Hibernate' เท่านั้น

คำตอบ:


126

ฉันเห็นฤดูใบไม้ผลิ JPA ทำงานกับที่เก็บข้อมูล (เลเยอร์ DAO: ถ้าฉันไม่ผิด) ดังนั้นฉันหมายความว่ามันแตกต่างกันอย่างไรเมื่อใช้ 'Spring JPA + Hibernate' หรือใช้ 'Hibernate' โดยตรงเท่านั้น

ดังที่คุณกล่าวไว้JPAเป็นข้อกำหนดในขณะที่Hibernateเป็นการใช้งานเฉพาะของข้อกำหนดนั้น (การใช้งานเหล่านี้มักเรียกว่าผู้ให้บริการ ) เมื่อใช้ Hibernate คุณจะผูกมัดตัวคุณเองกับผู้ให้บริการที่ จำกัด เสรีภาพในการเปลี่ยนไปใช้ตัวเลือกอื่นเมื่อต้องการ (ตัวอย่างเช่นคุณต้องการใช้ EclipseLink หรือ ObjectDB แทนเนื่องจาก Hibernate มีข้อผิดพลาดที่หยุดกระบวนการพัฒนาของคุณ)

การอ้างอิงเอกสารของJPA Spring Data :

การใช้ data access layer ของแอพพลิเคชั่นนั้นค่อนข้างยุ่งยากมาระยะหนึ่งแล้ว ต้องเขียนรหัส boilerplate มากเกินไป คลาสโดเมนนั้นเป็นแบบโลหิตจางและยังไม่ได้รับการออกแบบในลักษณะวัตถุจริงหรือแบบขับเคลื่อนโดเมน

การใช้เทคโนโลยีทั้งสองนี้ทำให้นักพัฒนาสามารถใช้ชีวิตได้ง่ายขึ้นมากเกี่ยวกับการคงอยู่ของโมเดลโดเมนที่หลากหลาย อย่างไรก็ตามจำนวนรหัส boilerplate ในการใช้ที่เก็บโดยเฉพาะอย่างยิ่งยังค่อนข้างสูง ดังนั้นเป้าหมายของการลบพื้นที่เก็บข้อมูลของ Spring Data คือการลดความพยายามในการใช้เลเยอร์การเข้าถึงข้อมูลสำหรับร้านค้าที่มีอยู่หลายแห่งอย่างมีนัยสำคัญ

เพื่อสรุปมันอยู่ด้านบนของ JPA เพิ่มอีกเลเยอร์ของ abstraction ชนิดของการกำหนดการออกแบบตามมาตรฐานเพื่อสนับสนุนเลเยอร์ Persistenceในบริบท Spring อินเตอร์เฟสที่กำหนดเหล่านั้น (รู้จักใน Spring) ให้บริการที่เฟรมเวิร์กจัดการโดยใช้ JPA เพื่อแสดงผลลัพธ์ คุณกำหนดที่เก็บในวิธีที่ Spring สามารถสแกนโครงการและค้นหา:

<repositories base-package="com.acme.repositories" />

ดังนั้นช่วยให้คุณสามารถใช้มันในบริบทของภาชนะบรรจุหรือนอกมัน

ตอนนี้สปริงคืออะไร JPA Spring, JPA ได้เพิ่มฟังก์ชันเพิ่มเติม (การเชื่อมต่อ) ผ่าน JPA และยังคงมีการระบุเท่านั้นหรือเป็นผู้ให้บริการ JPA ด้วยหรือไม่

Spring Data JPA ให้คำนิยามเพื่อนำไปใช้กับที่เก็บที่สนับสนุนภายใต้ประทุนโดยอ้างอิงข้อกำหนด JPA โดยใช้ผู้ให้บริการที่คุณกำหนด


1
ฉันสามารถเรียก Repository เป็นชุดของเอนทิตีที่สปริงจัดการได้หรือไม่ ฉันไม่รู้ว่าทำไม แต่ Spring JPA สนับสนุนการใช้ที่เก็บดูเหมือนว่าคล้ายกันมากกับ EntityManager ของ EJB - นั่นคือการคิดที่ถูกต้องหรือพวกเขาแตกต่างกันอย่างสิ้นเชิงในวัตถุประสงค์ของพวกเขา? ขอบคุณล่วงหน้า. มุสตาฟา
มุสตาฟา

1
@Mustafa โซลูชั่นส่วนใหญ่มีเหตุผลทั่วไป เป้าหมายที่ยากอาจเหมือนกันการใช้งานจะแตกต่างกันเนื่องจากส่วนต่อประสานที่เกี่ยวข้อง
ฟริตซ์

35

Java Persistence API บางครั้งเรียกว่า JPA เป็นกรอบการทำงานของ Java ที่จัดการข้อมูลเชิงสัมพันธ์ในแอปพลิเคชันโดยใช้แพลตฟอร์ม Java, Standard Edition (JavaSE) และ Java Platform, Enterprise Edition (JavaEE)

ความคงทนในบริบทนี้ครอบคลุมสามด้าน:

  • API เองกำหนดไว้ใน javax.persistenceแพ็คเกจ

  • ภาษา Java Persistence Query (JPQL)

  • ข้อมูลเมตาเชิงวัตถุ

    ป้อนคำอธิบายรูปภาพที่นี่

Spring Data JPA เป็นส่วนหนึ่งของโครงการ Spring Data ที่ทำให้การใช้ที่เก็บ JPA เป็นเรื่องง่าย

คุณสมบัติ:

  • การสนับสนุนอย่างพิถีพิถันในการสร้างแหล่งเก็บข้อมูลตาม Spring และ JPA
  • การสนับสนุนสำหรับเครื่อ QueryDSL และแบบสอบถามชนิด JPA ที่ปลอดภัย
  • การตรวจสอบที่โปร่งใสของคลาสโดเมน
  • การสนับสนุนการแบ่งหน้าการประมวลผลแบบสอบถามแบบไดนามิกความสามารถในการรวมรหัสการเข้าถึงข้อมูลที่กำหนดเอง
  • การตรวจสอบความถูกต้องของ@Queryข้อความค้นหาที่ทำหมายเหตุประกอบไว้ในเวลาบูทสแตรป
  • รองรับการแมปเอนทิตีที่ยึดตาม XML
  • การกำหนดค่าที่เก็บตาม JavaConfig โดยการแนะนำ @EnableJpaRepositories

    ป้อนคำอธิบายรูปภาพที่นี่

3

JPA

JPA เป็นข้อกำหนดที่เป็นมาตรฐานในการทำแผนที่วัตถุ Java กับระบบฐานข้อมูลเชิงสัมพันธ์ เป็นเพียงแค่สเปค, JPA ประกอบด้วยชุดของการเชื่อมต่อเช่นEntityManagerFactory, EntityManagerและคำอธิบายประกอบที่ช่วยให้คุณ map วัตถุนิติบุคคล Java เพื่อตารางฐานข้อมูล

มีผู้ให้บริการ JPA หลายแห่งเช่น HIbernate, EclipseLink หรือ Open JPA ซึ่งคุณสามารถใช้ได้

Spring Data JPA

Spring Data JPA เป็นนามธรรมการเข้าถึงข้อมูล JPA Spring Data JPA ไม่สามารถทำงานได้หากไม่มี JPA เช่นเดียวกับ JPA

Spring Data JPA นำเสนอโซลูชันสำหรับรูปแบบDDDRepositoryหรือ DAO (Data Acess Object) patternหรือนอกจากนี้ยังสามารถสร้างแบบสอบถาม JPA ในนามของคุณผ่านระเบียบวิธีชื่อ

Spring Data JPA สามารถทำงานกับ Hibernate, Eclipse Link หรือผู้ให้บริการ JPA อื่น ๆ ประโยชน์ที่น่าสนใจมากของการใช้ฤดูใบไม้ผลิหรือ Java EE คือการที่คุณสามารถควบคุมขอบเขตการทำธุรกรรม declaratively ใช้@Transactionalคำอธิบายประกอบ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.