JPA vs Hibernate
თითქმის ყველა საწარმო აპლიკაციას სჭირდება რეგულარულად წვდომა რელატიურ მონაცემთა ბაზაში. მაგრამ წინა ტექნოლოგიების (როგორიცაა JDBC) წინაშე მდგარი პრობლემა იყო წინაღობის შეუსაბამობა (განსხვავება ობიექტზე ორიენტირებულ და რელატიურ ტექნოლოგიებს შორის). ამ პრობლემის გადაწყვეტა დაინერგა აბსტრაქტული ფენის დანერგვით, სახელწოდებით Persistence layer, რომელიც აერთიანებს მონაცემთა ბაზაში წვდომას ბიზნეს ლოგიკით. JPA (Java Persistence API) არის ჩარჩო, რომელიც ეძღვნება რელაციური მონაცემების მართვას (მუდმივი ფენის გამოყენებით) Java აპლიკაციებში. არსებობს JPA-ს მრავალი გამყიდველი დანერგვა, რომელიც გამოიყენება Java დეველოპერთა საზოგადოებაში. Hibernate არის JPA-ს ყველაზე პოპულარული ასეთი განხორციელება (DataNucleus, EclipseLink და OpenJPA არის სხვა). უახლესი JPA ვერსია (JPA 2.0) სრულად არის მხარდაჭერილი Hibernate 3.5-ის მიერ, რომელიც გამოვიდა 2010 წლის მარტში.
რა არის JPA?
JPA არის ჩარჩო ჯავისთვის რელაციური მონაცემების მართვისთვის. მისი გამოყენება შესაძლებელია აპლიკაციებთან, რომლებიც იყენებენ JSE-ს (Java Platform, Standard Edition) ან JEE-ს (Java Platform, Enterprise Edition). მისი ამჟამინდელი ვერსიაა JPA 2.0, რომელიც გამოვიდა 2009 წლის 10 დეკემბერს. JPA-მ შეცვალა EJB 2.0 და EJB 1.1 entity beans (რომლებიც მძიმედ გააკრიტიკეს ჯავის დეველოპერთა საზოგადოებამ მძიმე წონის გამო). მიუხედავად იმისა, რომ entity beans (EJB-ში) უზრუნველყოფდა მდგრადობის ობიექტებს, ბევრი დეველოპერი იყო გამოყენებული შედარებით მსუბუქი ობიექტების გამოყენებაზე, რომლებსაც შემოთავაზებული ჰქონდათ DAO (მონაცემებზე წვდომის ობიექტები) და სხვა მსგავსი ჩარჩოები. შედეგად, JPA დაინერგა და მან დაიპყრო ზემოთ ნახსენები ჩარჩოების მრავალი მახასიათებელი.
მდგრადობა, როგორც აღწერილია JPA-ში, მოიცავს API-ს (განსაზღვრულია javax-ში.persistence), JPQL (Java Platform, Enterprise Edition) და ურთიერთობითი ობიექტებისთვის საჭირო მეტამონაცემები. მდგრადი ერთეულის მდგომარეობა ჩვეულებრივ ინახება ცხრილში. ერთეულის მაგალითები შეესაბამება რელაციური მონაცემთა ბაზის ცხრილის რიგებს. მეტამონაცემები გამოიყენება ერთეულებს შორის ურთიერთობის გამოხატვისთვის. ანოტაციები ან ცალკეული XML აღწერის ფაილები (განლაგებულია აპლიკაციასთან ერთად) გამოიყენება მეტამონაცემების დასაზუსტებლად ერთეულების კლასებში. JPQL, რომელიც SQL მოთხოვნების მსგავსია, გამოიყენება შენახული ერთეულების შეკითხვისთვის.
რა არის Hibernate?
Hibernate არის ჩარჩო, რომელიც შეიძლება გამოყენებულ იქნას ობიექტურ-რელატიური რუკებისთვის, რომელიც განკუთვნილია Java პროგრამირების ენისთვის. უფრო კონკრეტულად, ეს არის ORM (ობიექტურ-რელაციური რუკების) ბიბლიოთეკა, რომელიც შეიძლება გამოყენებულ იქნას ობიექტურ-რელაციური მოდელის ჩვეულებრივ რელაციურ მოდელზე. მარტივი სიტყვებით, ის ქმნის რუქას ჯავის კლასებსა და ცხრილებს შორის რელაციურ მონაცემთა ბაზებში, ასევე Java-დან SQL მონაცემთა ტიპებს შორის. Hibernate ასევე შეიძლება გამოყენებულ იქნას მონაცემთა მოთხოვნისა და მოსაძიებლად SQL ზარების გენერირებით.ამრიგად, პროგრამისტი თავისუფლდება შედეგების ნაკრების ხელით დამუშავებისა და ობიექტების კონვერტაციისგან. Hibernate გამოშვებულია როგორც თავისუფალი და ღია კოდის ჩარჩო, რომელიც განაწილებულია GNU ლიცენზიით. JPA API-ს განხორციელება მოწოდებულია Hibernate 3.2 და უფრო გვიან ვერსიებში. გევინ კინგი არის Hibernate-ის დამფუძნებელი.
რა განსხვავებაა JPA-სა და Hibernate-ს შორის?
JPA არის ჩარჩო რელაციური მონაცემების მართვისთვის Java აპლიკაციებში, ხოლო Hibernate არის JPA-ს სპეციფიკური იმპლემენტაცია (ასე რომ, იდეალურ შემთხვევაში, JPA და Hibernate პირდაპირ შედარება შეუძლებელია). სხვა სიტყვებით რომ ვთქვათ, Hibernate არის ერთ-ერთი ყველაზე პოპულარული ჩარჩო, რომელიც ახორციელებს JPA-ს. Hibernate ახორციელებს JPA-ს Hibernate Annotation და EntityManager ბიბლიოთეკების მეშვეობით, რომლებიც დანერგილია Hibernate Core ბიბლიოთეკების თავზე. EntityManager და Annotations მიჰყვება Hibernate-ის სასიცოცხლო ციკლს. უახლესი JPA ვერსია (JPA 2.0) სრულად არის მხარდაჭერილი Hibernate 3.5-ით. JPA-ს აქვს სტანდარტიზებული ინტერფეისის უპირატესობები, ამიტომ დეველოპერის საზოგადოება მას უფრო კარგად იცნობს, ვიდრე Hibernate.მეორეს მხრივ, მშობლიური Hibernate API შეიძლება ჩაითვალოს უფრო მძლავრად, რადგან მისი მახასიათებლები არის JPA-ის სუპერკომპლექტი.