JPA vs Hibernate
Бараг бүх аж ахуйн нэгжийн програмууд харилцааны мэдээллийн санд тогтмол хандах шаардлагатай байдаг. Гэхдээ өмнөх технологиуд (JDBC гэх мэт) тулгардаг асуудал бол импедантын үл нийцэл (объект хандалтат ба харилцааны технологийн ялгаа) байв. Бизнесийн логикоос өгөгдлийн сангийн хандалтыг багтаасан Persistence давхарга хэмээх хийсвэр давхаргыг нэвтрүүлснээр энэ асуудлыг шийдэх шийдлийг нэвтрүүлсэн. JPA (Java Persistence API) нь Java програмууд дахь харилцааны өгөгдлийн (тогтвортой байдлын давхаргыг ашиглан) удирдахад зориулагдсан хүрээ юм. Java хөгжүүлэгчийн нийгэмлэгт ашигладаг JPA-ийн олон үйлдвэрлэгчийн хэрэгжүүлэлт байдаг. Hibernate бол JPA-ийн хамгийн түгээмэл хэрэглүүр юм (DataNucleus, EclipseLink болон OpenJPA бусад). Хамгийн сүүлийн үеийн JPA хувилбар (JPA 2.0) нь 2010 оны 3-р сард гарсан Hibernate 3.5-аар бүрэн дэмжигддэг.
JPA гэж юу вэ?
JPA нь Java-д зориулсан харилцааны өгөгдлийг удирдах хүрээ юм. Үүнийг JSE (Java Platform, Standard Edition) эсвэл JEE (Java Platform, Enterprise Edition) ашигладаг програмуудад ашиглаж болно. Түүний одоогийн хувилбар нь 2009 оны 12-р сарын 10-нд гарсан JPA 2.0 юм. JPA нь EJB 2.0 болон EJB 1.1 entity beans-ийг сольсон (энэ нь Java хөгжүүлэгчдийн нийгэмлэгээс хүнд жинтэй гэж шүүмжлэгдэж байсан). Хэдийгээр entity beans (EJB-д) нь тогтвортой объектуудыг хангадаг байсан ч олон хөгжүүлэгчид DAO (Data Access Objects) болон бусад ижил төстэй хүрээнүүдийн санал болгож буй харьцангуй хөнгөн объектуудыг ашиглаж байсан. Үүний үр дүнд JPA-г нэвтрүүлсэн бөгөөд энэ нь дээр дурдсан фреймворкуудын олон сайхан шинж чанаруудыг олж авсан.
JPA-д тайлбарласны дагуу тогтвортой байдал нь API-г хамардаг (javax.persistence), JPQL (Java Platform, Enterprise Edition) болон харилцааны объектод шаардлагатай мета өгөгдөл. Тогтвортой байдлын төлөвийг ихэвчлэн хүснэгтэд хадгалдаг. Байгууллагын тохиолдлууд нь харилцааны мэдээллийн сангийн хүснэгтийн мөрүүдтэй тохирч байна. Мета өгөгдлийг аж ахуйн нэгж хоорондын харилцааг илэрхийлэхэд ашигладаг. Аннотаци эсвэл тусдаа XML тодорхойлогч файлуудыг (програмд суулгасан) аж ахуйн нэгжийн ангиудад мета өгөгдлийг тодорхойлоход ашигладаг. SQL асуулгатай төстэй JPQL нь хадгалагдсан объектуудыг асуухад ашиглагддаг.
Итгэх гэж юу вэ?
Hibernate нь Java програмчлалын хэлэнд зориулагдсан объектын хамаарлын зураглалд ашиглагдах хүрээ юм. Тодруулбал, энэ нь ORM (объект-холбооны зураглал) номын сан бөгөөд объект-харилцааны загварыг ердийн харилцааны загварт буулгахад ашиглаж болно. Энгийнээр хэлбэл, энэ нь харилцан хамаарал бүхий өгөгдлийн сангийн Java ангиуд болон хүснэгтүүдийн хооронд, мөн Java-аас SQL өгөгдлийн төрлүүдийн хооронд зураглал үүсгэдэг. Hibernate-ийг мөн SQL дуудлага үүсгэх замаар өгөгдөл хайх, сэргээхэд ашиглаж болно. Тиймээс программист үр дүнгийн багцыг гараар зохицуулах, объектыг хөрвүүлэхээс чөлөөлөгддөг. Hibernate нь GNU лицензийн дагуу түгээгдсэн үнэгүй, нээлттэй эхийн хүрээ хэлбэрээр гаргасан. JPA API-д зориулсан хэрэгжилтийг Hibernate 3.2 болон түүнээс хойшхи хувилбаруудад өгсөн. Гэвин Кинг бол Hibernate-ийг үндэслэгч.
JPA болон Hibernate хоёрын ялгаа нь юу вэ?
JPA нь Java програмууд дахь харилцааны өгөгдлийг удирдахад зориулагдсан хүрээ бөгөөд Hibernate нь JPA-ийн тусгай хэрэгжилт юм (тиймээс JPA болон Hibernate-ийг шууд харьцуулах боломжгүй). Өөрөөр хэлбэл Hibernate нь JPA-г хэрэгжүүлдэг хамгийн алдартай фреймворкуудын нэг юм. Hibernate нь Hibernate Core номын сангууд дээр хэрэгждэг Hibernate Annotation болон EntityManager сангуудаар дамжуулан JPA-г хэрэгжүүлдэг. EntityManager болон Annotations хоёулаа Hibernate-ийн амьдралын мөчлөгийг дагаж мөрддөг. Хамгийн сүүлийн үеийн JPA хувилбарыг (JPA 2.0) Hibernate 3.5 бүрэн дэмждэг. JPA нь стандартчилагдсан интерфэйстэй байх давуу талтай тул хөгжүүлэгчдийн нийгэмлэг үүнийг Hibernate-ээс илүү сайн мэддэг байх болно. Нөгөөтэйгүүр, уугуул Hibernate API-ууд нь JPA-ийн онцлогтой харьцуулахад илүү хүчирхэг гэж үзэж болно.