Hibernate

**Hibernate** on objekt-relatsioonilise kaardistamise (ORM) teek Java keele jaoks. Teek pakub raamistiku objektorienteeritud domeeni mudeli sidumiseks (*mapping*) traditsiooniliste relatsiooniandmebaasidega. Hibernate lahendab objekt-relatsioonilise impedantsi ebakõla probleeme, asendades otsese püsivusega seotud andmebaasi ligipääsud kõrgtasemeliste objektide käitlemise funktsioonidega.

Hibernate on vabavara, mida levitatakse vastavalt litsentsile GNU Lesser General Public License.

Hibernate'i esmane funktsioon on siduda (*mapping*) Java klassid andmebaasi tabelitesse (ja Java andmetüübid SQL-andmetüüpidesse). Hibernate pakub andmete päringu- ja otsinguvahendeid, samuti genereerib SQL-päringuid ja üritab vähendada arendajapoolset tulemuste käsitsi töötlemist ja objektide konverteerimist ning hoiab rakenduse ühilduvust kõikide toetatud SQL-andmebaaside jaoks koos väikese jõudluse kuluga.

## Kaardistamine
Java klasside sidumine andmebaasi tabelitesse toimub XML-vormingus konfiguratsioonifaili abil või kasutades Java annotatsioone. XML-faili abil saab Hibernate genereerida lähtekoodi püsivate klasside jaoks. See ei ole vajalik, kui kasutatakse annotatsioone. Hibernate'is saab kasutada XML-faili või annotatsioone, et säilitada andmebaasi skeemi.
Programmiga saab korraldada üks-mitu ja mitu-mitu suhteid klasside vahel. Lisaks objektide vaheliste seoste haldamisele saab Hibernate juhtida refleksiivseid seoseid, kus objektil on üks-mitu seosed teiste andmekogudega sama andmetüübi korral.

Hibernate toetab kasutaja määratud väärtuste tüüpe. See võimaldab:
* veeru sidumiseks kasutatava vaike-SQL-tüübi ümbermääratlemist;
* Java loendi tüübi sidumist veergudesse, nagu need oleksid tavaomadused;
* üksiku omaduse mitmesse veergu sidumist.

## Püsivus
Hibernate pakub *püsivust* tavaliste Java objektide (POJOs) jaoks. Range nõue *püsiva* klassi jaoks on ilma argumendita konstruktor, see ei pea *public* olema. Erilist tähelepanu nõuavad ka *equals()* ja *hashCode()* meetodid.

Andmeobjektide kogud on tavaliselt salvestatud Java kollektsiooni objektidesse, nagu *Set* ja *List*. Hibernate'is saab seadistada laisa laadimisega seotud kogud. Laisk laadimine on vaikimisi olemas Hibernate 3 versioonis.

Seotud objektid võivad olla konfigureeritud *kaskaadima* toiminguid ühest teise. Näiteks ülemobjekti *Album* saab seadistada kaskaadima oma *save* ja / või *delete* operatsioone enda alamobjektile *Track*. See võib vähendada ajakulu ja tagada referentsiaalset terviklikkust. *Dirty checking* funktsioon väldib tarbetuid andmebaasi kirjutamistegevusi tehes SQL-uuendusi ainult püsivate objektidega modifitseeritud väljadel.

## Hibernate'i päringute keel (HQL)
Hibernate kasutab SQL-keelest inspireeritud keelt Hibernate Query Language (HQL), mis võimaldab SQL-tüüpi päringute kirjutamist Hibernate andmeobjektide vastu. HQL-i asemel saab kasutada ka *kriteeriumipäringuid*.

## Integratsioon
Hibernate'i saab kasutada autonoomsetel Java rakendustel ja Java EE rakendustel, kasutades servlette, EJB seansiobjekte ja JBI teenuste komponente. Rakendus võib olla lisatud ka teistes programmeerimiskeeltes. Näiteks Adobe integreeris Hibernate'i ColdFusion 9 versiooni CFML sisse (mis jookseb J2EE serveri peal). Integreeriti koos abstraktsioonide kihiga ning uute funktsioonide ja süntaksiga.

## Üksused ja komponendid
Hibernate'i žargoonis on *olem* (*entity*) omaette objekt Hibernate'i püsivas mehhanismis, millega saab manipuleerida sõltumata teistest objektidest. Seevastu *component* allub teistele üksustele ja sellega saab manipuleerida ainult seoses muude üksustega. Näiteks objekt *Album* võib esindada üksust, kuid objekt *Track*, mis on assotsieerunud *Album* objektidega esindab *komponenti* *Album* üksusest, kui eeldada, et *Track'i* saab salvestada või laadida *Album* objekti kaudu. Erinevalt J2EE-st saab objekt siin vahetada andmebaase.

## Ajalugu
Hibernate loodi 2001. aastal Gavin King algatusel ja see oli alternatiiviks EJB2-stiilis objektide kasutamisele, vähendades keerukust ning võimaldades puuduvaid funktsioone.

2003. aasta alguses alustas Hibernate'i arendusmeeskond Hibernate 2 turule toomist, mis pakkus mitmeid olulisi parandusi esimese versiooniga võrreldes.

JBoss, Inc. (nüüd osa Red Hati ettevõttest) palkas hiljem juhtivaid Hibernate'i arendajaid ja töötas nende toetusel Hibernate'i arendamisel.

2010. aastal ilmus Hibernate'i versioon 3.x koos selliste funktsioonidega: uus Interceptor / Callback arhitektuur, kasutaja määratletud filtrid ja JDK 5,0 annotatsioonid (Java metaandmete funktsioon).
Aasta 2010 seisuga oli Hibernate 3 (versioon 3.5.0 ja uuem) Java Persistence API 2.0 sertifitseeritud realisatsiooni spetsifikatsioon pakendina Core mooduli jaoks, mis on kooskõlas [JSR 317] standardiga.

2011. aasta detsembris ilmus Hibernate Core 4.0.0 lõplikult. See sisaldas uusi funktsioone, nagu Esmane multi-haldus tugi, Sissejuhatus ServiceRegistry'sse (mis on peamine muutus selles, kuidas Hibernate ehitab ja haldab "teenuseid"), sessioonide avamise eemaldamist SessionFactory'st, Parem integratsioon *org.hibernate.integrator.spi.Integrator* kaudu ja automaatse avastamise funktsioon, parem sisselogimine koos i18n toega ja veakoodidega, esimene selgem lahknevus API, SPI ja ilmplementatsiooni klasside vahel, iganenud meetodite, klasside jms eemaldamine.

2012. aastal hakati arendama Hibernate 5, mis sisaldas JPA 2.1 tuge.

## Rakenduse programmeeritav liides
Hibernate API sisaldub Java paketis.

### [http://docs.jboss.org/hibernate/stable/core/javadocs/org/hibernate/SessionFactory.html org.hibernate.SessionFactory] interface

Muutumatud viited ja lõime ohutuse objektid loovad uue Hibernate'i sessiooni. Hibernate'i-põhised rakendused on tavaliselt loodud selleks, et kasutada ainult üksikjuhtumeid klassi liidese rakendamisel (sageli esindatud kasutades üksikuid disainimustreid).

### [http://docs.jboss.org/hibernate/stable/core/javadocs/org/hibernate/Session.html org.hibernate.Session] interface

Esindab Hibernate'i sessiooni st põhilised manipulatsioonid toimuvad andmebaasi objektide sees. Viimasena nimetatud tegevuste hulka kuuluvad (lisaks muudele asjadele) objektide oleku salvestamise juhtimine (muutumine, püsimine, eraldumine), andmebaasist püsivate valimine ja tehingute piiritlemise haldamine.

## Tarkvara komponendid
Hibernate'i tarkvara sisaldab järgmisi komponente:
* Hibernate ORM (oli tuntud Hibernate Core nime all enne versiooni 4,1) – baastarkvara objekt-relatsioonilise kaardistmise jaoks Java keskkonnas
* Hibernate annotatsioonid (ühendati Hibernate Core'i / ORM-i alates versioonist 3,6) - metaandmed, mis reguleerivad andmete muutmise objektorienteeritud mudeli ja relatsioonilise andmebaasi mudeli vahel JSR 317 järgi Java Persistence API (JPA 2)
* Hibernate EntityManager – koos Hibernate annotatsioonidega, ümbris, mis rakendab JSR 317 Java Persistence API (JPA 2) püsivuse lahendust Hibernate Core'i peal 
* Hibernate Envers – auditeerimine ja püsivate klassid versioonide haldamine
* Hibernate OGM – Objekt / Grid Mapper on rakendus andmete salvestamiseks NoSQL-i
* Hibernate Shards – horisontaalne eraldamine mitme relatsioonandmebaasi jaoks
* Hibernate Search – integreerib Apache Lucene täisfunktsionaalsust Hibernate ja JPA mudelis
* Hibernate Tools – tööriistade komplekt, milles rakendatud Eclipse'i pluginad ja Anti ülesanded – JBoss Developer Studio
* Hibernate Validator – JSR 303 objekti valideerimise viidete rakendamine
* Hibernate Metamodel Generator – annotatsiooni protsessor, mis loob JSR 317 Java Persistence API (JPA 2) staatilisi metamudelite klasse, kasutades JSR 269 Pluggable Annotation Processing API-t
* NHibernate – objekt-relatsioonilise kaardistamise lahendus .​​NET Frameworki jaoks

## Vaata ka
* pureQuery
* EJB 3.0
* NHibernate
* Serialization
* MyBatis
* iBATIS
* Service Data Object
* QuickDB ORM

## Viited

## Välislingid
*Ametlik veebileht