ฉันเห็นฤดูใบไม้ผลิ 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 โดยใช้ผู้ให้บริการที่คุณกำหนด