แปลมากจากเอกสาร Spring Ref Manual
ข้อดีของการใช้งานสปริงในมุมมองของการทำ ORM คือ
ทดสอบได้ง่ายมาก: เนื่องจากด้วยแนวคิดพื้นฐานเรื่อง IoC ทำให้เราสามาระสลับการเข้าถึงฐานข้อมูลได้ง่ายมากระหว่างระบบที่ใช้ทดสอบและระบบที่ใช้งานจริงเช่นเราสามารถสลับคอนฟิกของ Hibernate SessionFatory, JDBC DataSource, Transaction Manager และแมปปิ้งออบเจค ได้งายมากๆ สิ่งนี้ทำให้เราสามารถแยกสภาพแวดล้อมการทำงานได้อย่างเด็ดขาดระหว่างการทดสอบและการใช้งานจริง
จัดการเรื่อง Exception ต่างๆ(ORM แต่ละตัวจะมีกระบวนการเรียงร้อยและการจัดการกับ error ที่ต่างกัน)ให้อยู่ภายใต้กลุ่มที่ชื่อ DataAccessException ทำให้เราไม่ต้องเสียเวลานั่งจัดการเรื่อง Exception ต่างๆที่จะเกิดขึ้นและสามารถจับเออร์เร่อร์ได้อย่างมีประสิทธิภาพและทำได้ที่จุดที่ถูกต้องเสมอ นอกจากนี้ JDBC exception(dialect จำเพาะเจาะจงต่างของ Database) ต่างๆนั้นก็ถูกจัดให้อยู่ภายในระบบโครงสร้างเดียวกันด้วยทำให้เราสามารถทำงานบางอย่างผ่าน JDBC ด้วยโมเดลการเขียนโปรแกรมที่ถูกและดีอย่างที่ควรจะเป็น
การจัดการเรื่องทรัพยากรต่างๆ โดยที่ Spring Application Context สามารถจัดการกับ Instance ของ Hibernate SessionFactory, JDBC DataSource นอกจากนี้ยังรวมไปถึง IBatis SQL Maps และทรัพยากรณ์ต่างๆที่เกี่ยวข้องอีกด้วยยกตัวอย่างเช่น ในกรณีที่โค้ดในแอพพลิเคชั่นของเราต้องใช้ Hibernate Session ร่วมกันเพื่อประสิทธิภาพในการทำงานและการจัดการ Transaction อย่างเป็นระบบซึ่ง Spring เองจะเข้ามาช่วยเราได้ด้วยการซ่อนงานที่ซับซ้อนในการสร้างและวาง Session ลงบน Thread ปัจจุบันให้กับเราด้วยการใช้ Template ที่ระดับ Java โค้ดหรือด้วยการ Expose ตัว Session ปัจจุบันผ่าน Hibernate SessionFactory (สำหรับ DAO ที่ทำงานบน Hibernate API) ดังนั้นจะเห็นได้ว่า Spring นั้นได้เข้ามาช่วยเราเรื่อง
การทำงานร่วมกับ Transaction Menagement ที่หลากหลายได้อย่างลงตัว เนื่องจากเราสามารถ wrap โค้ดของเราด้วยการใช้ AOP interceptor ที่ระดับเมธอดหรือการใช้ template wraper ในระดับคลาสซึ่งการกำหนดทั้งสองแบบนี้จะส่งผลให้ระบบของเราสามารถใช้งาน transaction ได้อย่างถูกต้อง(มีการทำ rollback)เมื่อเกิดเออร์เรอร์ขึ้นในจังหวะใดๆของการทำงานกับ Database และอย่างที่รู้กันว่าตัวจัดการ Transaction ใน Java นั้นมีให้เลือกใช้หลายตัวมากตามความเหมาะสม และอีกครั้งที่ Spring สามารถช่วให้เราสามารถเปลี่ยนหรือสลับการใช้งานตัวจัดการ Transaction ได้อย่างสะดวกสบายยกตัวอย่างเช่นระหว่าง Local Transaction และ JTA นอกจากนี้ประโยชน์อีกอย่างคือโค้ดส่วนต่างๆที่เกี่ยวข้องกับ JDBC นั้นสามารถทำงานร่วมกับ Transaction ที่เราใช้สำหรับ ORM ได้ด้วยเช่นกันซึ่งสิ่งนี้จะเป็นประโยชน์มากในกรณีที่เราจำเห็นต้องทำงานบางอย่างที่ไม่เหมาะกับ O/R เช่น Batch Process, Streaming ของ BLOB
