Hibernate Mapiranje u Javi

Embed Size (px)

Citation preview

Fakultet za kompjuterske nauke

Hibernate framework za mapiranje baza podataka u JaviSeminarski rad Profesor Slobodan Obradovic Konstantinovic Razvoj softvera Student Mina k062/09

oktobar 2011 Beograd

1

SadrzajUvodno poglavlje .................................................................................... 31.Hibernate i ukratko o objektnom relacionom mapiranju ....................................... 3 2. Kako se Hibernate uklapa u Java aplikaciju ............................................................ 7 3. Koraci potrebni za integraciju i konfiguraciju Hibernatea ..................................... 8

Jednostavna aplikacija ............................................................................. 94. Kreiranje Hibernate konfiguracije ........................................................................... 9 5. Kreiranje mapiranja objekta .................................................................................. 11

Mapiranje .............................................................................................. 146. Asocijacije ............................................................................................................. 14 7. Specifikacije tipova kolona i velicina kod mapiranja ............................................. 20 8. Mapiranje odnosa nasledjivanja na bazu ............................................................. 21 Literatura .................................................................................................................. 22

2

1.Hibernate i ukratko o objektnom relacionom mapiranjuVeina bitnih razvojnih projekata ukljuuju relacione baze podataka. Glavni oslonac veine komercijalnih aplikacija je visoko-skalirano skladitenje ureenih informacija kao to su katalozi, potroake liste, detalji ugovora, objavljeni tekstovi i arhitekturalni dizajn. Sa nastankom World Wide Web-a, zahtjevi za bazama podataka su se poveali. Iako oni toga moda nisu svjesni , korisnici online kupovine koriste baze podataka. Negdje izmeu, deava se upit baze podataka i nudi odgovor. Iako je zahtev za takvim aplikacijama porastao, njihovo kreiranje nije postalo zapaajue jednostavnije. Pojavila se odreena standardizacija od kojih je najuspjeniji EJB standard (engl. Enterprise JavaBeans) za Java 2 EE, koji obazbjeuje persistenciju entity-bean klasa. Naalost, ovaj i drugi persistencijski modeli svi pate od jednog ili drugog stepena neslaganja izmeu relacionog modela i objektno-orijentisanog modela. Ukratko, perzistencija baze podataka je teka. U nastavku e biti definisana dva bitna pojma. Perzistencija predstavlja osobinu da podatak nastavi postojati i nakon zavretka programa koji ga je stvorio. Bez ove osobine podatak bi samo postojao u RAM-u. ORM (engl. Object/Relation Mapping.) , ili preslikavanje objekata i relacija, deluje kao posrednik izmeu dva u osnovi razliita oblika podataka. Korisnik tim posredstvom, uz zanemarive rtve u pogledu performansi dobiva virtuelno objektno orijentisanu bazu u koju posprema objekte iz aplikacije po potrebi, bez brige o samom procesu preslikavanja. Postoje rjeenja za koja su EJB podesni, neka reenja kod kojih je neki vid objektno- relacionog mapiranja kao Hibernate podesan, te neka kod kojih je tradicionalni pristup sa JDBC API-em vie nego dovoljan. Meutim Hibernate u 3

veini sluajeva predstavlja dobar prvi izbor jer ne spreava simultano koritenje ovih alternativnih pristupa. ORM je nain postizanja perzistencije objekata unutar relacijskih baza podataka. On deluje kao posrednik na podatkovnom nivou aplikacije, automatski preslikavajui podatke iz objekata u bazu i natrag, na zahtev aplikacije. Iako sam pojam posrednika sa sobom povlai problem smanjenih performansi (jer se komunikacije ne deavaju direktno), prednosti koje ovakav pristup donosi definitivno nadjaavaju bilo kakve probleme sa performansama. Tema ovoga rada jeste Hibernate framework za objektno/relaciono mapiranje u Java programskom okruenju. Hibernate je moan servis visokih performansi za objektno/relacionu perzistenciju i upite. On nam omoguava razvoj perzistentnih klasa dok sledimo objektno-orijentisanu paradigmu ukljuujui asocijaciju, nasljeivanje, polimorfizam, kompoziciju i kolekcije. Hibernate dozvoljava izraavanje upita u svom vlastitom portabilnom SQL proirenju (HQL), a istovremeno i u izvornom SQL-u. Za razliku od mnogih drugih reenja perzistencije, Hibernate nam ne sakriva snagu SQL-a i garantuje da su vae investicije u relacione tehnologije i znanje uvek validne. Posebna prednost je to je licenciran pod LGPL licecsom koja dozvoljava njegovu besplatnu upotrebu kako u open-source tako i u velikim komercijalnim projektima.

4

Sematski prikaz objektno/relacionog mapiranja Ako je Hibernate reenje, ta je bio problem? Jedan odgovor je u tome da obavljanje poslova koritenjem JDBC-a zahtieva znatno vee telo koda, a paljivo osmatranje razliitih pravila (kao to je npr. upravljanje konekcijom) kako bi se obezbedilo da aplikacija nema efekat curenja resursa postaje veoma zamoran posao. Neka imamo POJO klasu Message. Kod ove klase dat je u nastavku: public class Message { private Message() {} public Message(String messageText) { this.messageText = messageText; } 5

public String getMessageText(){ return messageText; } public void setMessageText(String messageText){ this.messageText = messageText; } private String message; } Listing 1-1. POJO klasa koriena u primeru u ovom poglavlju. Da bi prikupili sve poruke u kolekciju tipa List potrebno je relativno mnogo koda u klasinom primeru sa JDBC-em. Primer ovog koda prikazan je u listingu 1-2. public static List getMessages(int messageId) throws MessageException { Connection c = null; PreparedStatement p = null; List list = new ArrayList(); try{ Class.forName(org.postgresql.Driver); c = DriverManager.getConnection( jdbc:hsqldb:testdb;shutdown=true, hibernate, hibernate); p = c.prepareStatement( select message from motd); ResultSet rs = p.executeQuery(); while(rs.next()) { String text = rs.getString(1); list.add(new Message(text)); } return list; } catch (Exception e) { log.log(Level.SEVERE, Nemoguce prikupiti poruku, e); throw new MotdException( Greska prilikom dohvacanja poruke iz baze!, e) } finally { if( p != null) { try { p.close(); 6

} catch (SQLException e){ log.log(Level.WARNING, Nemoguce zatvoriti otvoren iskaz., e); }//kraj catch bloka } if( c != null ){ try{ p.close(); } catch ( SQLException e) { log.log(Level.WARNING, Nemoguce zatvoriti otvorenu konekciju., e); } } } } Listing 1-2. JDBC pristup u dohvaanju Java objekta. Deo ovoga se moe redukovati; postoje odreene tehnike koje omoguavaju redukciju koda kod otvaranja konekcija i problema logging-a, ali osnovna logika koja upa instancu objekta iz ResultSet objekta postaje komplikovanija kako i sam objekat postaje komplikovaniji. Jednom kada objekat koristi reference na druge objekte ili ak gore, druge kolekcije objekata ove manulene tehnike postaju vie liiti na lavirint neitljivog koda.

2. Kako se Hibernate uklapa u Java aplikacijuHibernate adresira mnogo ovih problema pa emo ih istai prirodnim redom. Hibernate ne zahteva mapiranje jednog tipa objekta na jednu tabelu. POJO objekat se moe konstruisati nad selekcijom kolona tabele, ili se nekoliko objekata moe perzistirati u jednu tabelu. Hibernate direktno podrava odnose nasljeivanja i brojne druge odnose meu klasama. Iako postoji premaenje zbog performansi dok se Hibernate pokrene i procesira svoje konfiguracijske fajlove, generalno se posmatra kao brz alat. U Hibernate-u je mogue ali nije neophodno specificirati preslikavanja (engl. mappings) u periodu deplojmenta. On nastoji smanjiti bol prilikom deplojmenta aplikacija u novom okruenju. Osim toga Hibernate ne namee nikakve zahteve za J2EE aplikacijski server ili bilo koje drugookruenje. Prema tome mogo vie je podesno reenje za samostalne aplikacije, skladitenje u klijentski orijentisanim aplikacijama i u drugim okruenjima u kojima J2EE server nije odmah dostupan. 7

Hibernate koristi POJO objekte koji se jednostavno i prirodno mogu generalizirati za korienje u drugim aplikacijama. Nema direktne zavisnosti nad Hibernate bibliotekama, tako da se POJO objekti mogu koristiti i bez perzistencije. Hibernate ne predstavlja problem u upravljanju serijalizibilnim Java objektima. Ve postoji veliko telo prethodno podeenog koda. Svaki Java objekat koji je u mogunosti da bude perzistiran u bazi je kandidat za Hibernate perzistenciju. Dakle, Hibernate je prirodna zamena za ad hoc reenja, ili kao maina za perzistenciju za aplikaciju koja jo uvek nema inkorporiranu perzistenciju. Naredni primer 1 pokazuje sa koliko manje posla je potrebno sa Hibernate-om. public static List getMessages(int messageId) throws MessageException { SessionFactory sessions = new Configuration().configure() .buildSessionFactory(); Session session = sessions.openSession(); Transaction tx = null; try{ tx = session.beginTransaction(); List list = session.createQuery(from Message).list(); tx.commit(); tx = null; return list; } catch( HibernateException e ) { if( tx != null) tx.rollback(); log.log(Level.SEVERE, Nemogue pokupiti poruku, e); throw new MotdException( Greska prilikom dohvacanja poruke iz baze, e); } finally { session.close(); } } Primer 1. Hibernate pristup u dohvaanju Java objekta. ak i za trivijalan primer bilo bi mnogo redukcije u koliini koda potrebnog za stvarni deplojment posebno u okruenju sa aplikacionim serverom. Bitno je primetiti da manuelno kodiranje u populaciji objekta poruke nije istaknuto zapravo, samo je preneeno u vanjski konfiguracijski fajl koji izolira ovaj implementacijski detalj od glavne logike.

8

3. Koraci potrebni za integraciju i konfiguraciju Hibernate-aU ovoj sekciji opisani su konfiguracijski i integracijski detalji u vidu kratkih crtica one nam govore ta je sve potrebno da bismo podigli i pokrenuli nau prvu Hibernate zasnovanu aplikaciju. To su sledei koraci: Identifikovati POJO objekte koji imaju reprezentaciju u bazi podataka. Identifikovati koje delove ovih objekata trebaju biti perzistentne. Kreirati Hibernate XML fajlove mapiranja za svaki POJO koji preslikava atribute na kolona u tabeli. Kreirati emu baze podataka korienjem alata za eksport eme, koristiti postojeu bazu ili kreirati vlastitu emu baze podataka. Dodati Hibernate Java biblioteke u classpath projekta. Kreirati Hibernate XML konfiguracijski fajl koji pokazuje na bazu i XML fajlove za mapiranje. U Java aplikaciji, kreirati Hibernate Configuration objekat koji referencira na XML konfiguracioni fajl. U Java aplikaciji, podignuti Hibernate SessionFactory objekat na osnovu Configuration objekta. Konano, pokupiti Hibernate Session objekat na osnovu SessionFactory objekta, te napisati logiku pristupa podacima iz aplikacije.

4. Kreiranje Hibernate konfiguracijePostoji nekoliko naina pomou kojih se Hibernate-u moe dati informacija koja mu je potrebna za konekciju na bazu podataka da bi odredio svoja mapiranja. Za na primjer sa porukom, koristimo fajl hibernate.cfg.xml koji se nalazi u src direktoriju projekta a dat je u narednom listingu. 9

jdbc:mysql://localhost/hibernate com.mysql.jdbc.Driver amer zekoslav 10 org.hibernate.dialect.MySQLDialect false Listing 2-1. Konfiguracijski fajl za Hibernate konekciju i reference na ostale fajlove mapiranja. Prethodni listing predstavlja konfiguraciju za konekciju na MySQL bazu podataka. Da bismo odredili da se radi upravo o toj bazi potrebna su nam tri parametra. Jedan je hibernate.connection.url, podeen na vrednost jdbc:mysql://localhost/hibernate kojim naznaavamo putanju u konekciji do baze. Drugi bitan parametar je hibernate.connection.driver_class koji nam slui da specificiramo u kojem paketu se nalazi JDBC drajver za konekciju. Konano, treim parametrom hibernate.dialect navodimo i tip dijalekta koji koristimo. To je u ovom sluaju Mysql dijalekt. Osim ovoga treba navesti da Hibernate podrava i naredne dijalekte: DB2 - org.hibernate.dialect.DB2Dialect HypersonicSQL org.hibernate.dialect.HSQLDialect Informix org.hibernate.dialect.InformixDialect Ingres org.hibernate.dialect.IngresDialect Interbase org.hibernate.dialect.InterbaseDialect Pointbase org.hibernate.dialect.PointbaseDialect PostgreSQL org.hibernate.dialect.PostgreSQLDialect 10

MckoiSQL - org.hibernate.dialect.MckoiDialect Microsoft SQL Server org.hibernate.dialect.SQLServerDialect MySQL org.hibernate.dialect.MySQLDialect Oracle org.hibernate.dialect.OracleDialect Progress - org.hibernate.dialect.ProgressDialect FrontBase org.hibernate.dialect.FrontbaseDialect SAP DB org.hibernate.dialect.SAPDBDialect Sybase - org.hibernate.dialect.SybaseDialect Sybase Anywhere - org.hibernate.dialect.SybaseAnywhereDialect Jedna vidljiva prednost koritenja Hibernate-a jeste sloj apstrakcije kada je u pitanju korienje njegovog vlastitog HQL jezika i konekcije na bazu. Naime, zahvaljujui ovoj konfiguraciji mogue je promeniti DBMS sistem, a da korisnik ne mora menjati ostale parametre u programu osim samog konfiguracijskog fajla. Linija ,predstavlja referencu na datoteku u kojoj emo kasnije raditi mapiranje tabela baze na Java objekte. Generalno pristup je takav da za svaki POJO objekat kojeg mapiramo imamo i posebnu datoteku za mapiranje. Naa aplikacija e generalno obezbediti tehnologiju perzistencije za online billboard aplikaciju. Klasni dijagram je dat u nastavku:

Dijagram klasa za primer opisan u gornjem tekstu 11

Ovo je veliko pojednostavljenje tipa klasa koje bi se koristile u produkcionom svetu. Posebno interesantan je odnos vie-na-vie izmeu kategorija i reklama. elimo biti u mogunosti da imamo vie kategorija i reklama, te da moemo bilo koju reklamu svrstati u vie od jedne kategorije. Na primer, elektrini klavir moe biti izlistan i u kategoriji Instrumenti, a isto tako u kategoriji Elektronika.

5. Kreiranje mapiranja objekta

Sada nakon to imamo nae POJO klase, potrebno je da ih mapiramo na bazu podataka, predstavljajui polja svakog direktno ili indirektno kao vrednosti u kolonama asociranih tabela. Ii emo redom za svaku klasu. Navodimo potpuno kvalifikovano ime tipa koji mapiramo, i tabela u koju bismo ga eleli smestiti (korieno je ime aduser jer je user kljuna re u mnogim bazama podataka). Klasa ima tri polja: - id polje: Odgovara surogat kljuu koji e se koristiti i generisati od strane baze. Ovo specijalno polje se upravlja elementom. Ime polja se navodi u name atributu. Definisano je kao long tip, i elimo sauvati njegove vrednosti u bazu u long koloni. Navodimo da mora biti generisan od strane baze, umesto od Hibernate-a. - name polje: Predstavlja ime korisnika. Treba se uvati u koloni name. Tipa je String. Ne dozvoljavamo uvanje duplih imena u tabeli. - password polje: Predstavlja ifru datog korisnika. Mora se uvati kao kolona sa imenom password. Tipa je String. Imajui ovo na umu, mapiranje u listingu 2-2 bi trebalo biti relativno jednostavno. 12

Listing 2-2. Mapiranje User.hbm.xml za klasu User. Mapiranje Category klase predstavlja novi tip odnosa: vie-na-vie. Svaki objekat Category je asociran sa skupom reklama, dok je bilo koja reklama asocirana sa vie kategorija. Elemenat indicira da upitno polje ima java.util.Set tip sa imenom adverts. Ovaj tip veze zahteva kreiranje dodatne tabele veze, tako da moemo navesti ime tabele koja sadri tu informaciju. Navodimo da je primarni klju za objekte sadrane u link tabeli predstavljen id kolonom , i obezbjeujemo puno kvalifikovano ime tipa klase koja se sadri u tabeli. Navodimo kolonu u link tabeli koja predstavlja reklame povezane sa svakom kategorijom. Ovo je mnogo komplikovanije opisano nego to zaista jeste, pa je najbolje pogledati sljedei listing. Listing 2-3. Mapiranje Category.hbm.xml za klasu Category. Konano prikazaemo i Advert klasu. Ova klasa uvodi vie-na-jedan asocijaciju, u ovom sluaju sa User klasom. Bilo koja data reklama mora pripadati jednom korisniku, ali bilo koji korisnik moe postaviti vie razliitih reklama. 13

Listing 2-4. Mapiranje Advert.hbm.xml za klasu Advert. Nakon to smo kreirali individualne fajlove za preslikavanja, potrebno je rei Hibernate-u gde da ih nae. Obzirom da koristimo Hibernate konfiguracijski fajl potrebno je dodati tri sledee linije u Hibernate.cfg.xml:

MapiranjeSvrha Hibernate alata jeste da vam omogui da tretirate bazu podataka kao da skladiti Java objekte. Meutim, baze u praksi ne uvaju objekte one uvaju podatke u tabelama i kolonama. Naalost, nema jednostavnog naina za povezivanje podataka skladitenih u bazi sa podacima predstavljenim Java objektima. Drugim reima posao mapiranja teoretski ne moe biti automatiziran. Kako je ovaj deo posla svakako preputen programeru lepo je znati i tipove asocijacija koje Hibernate podrava kada je u pitanju prikazivanje relacija baze podataka u objektnom svetu.

6. Asocijacije

Posmatrajmo u nastavku dve jednostavne klase bez metoda kako bismo mogli prikazati mogue odnose i tipove asocijacija meu njima. Za opis su nam bitni samo atributi svake 14

od ove dve klase. public class Customer { int customerId; int customerReference; String name; Email email; } public class Email { String address; } Listing 2-5. Dve jednostavne klase za primer asocijacije. Mogli bismo sebi postaviti sledea pitanja o odnosima atributa ovih klasa: Da li jedinstvenog (unique) potroaa identifikuje njegov ID , ili njegova referenca? Da li datu e-mail adresu moe koristiti vie od jednog potroaa? Da li bi odnos trebalo predstaviti u Customer tabeli? Da li bi odnos trebalo predstaviti u Email tabeli? Da li bi odnos trebalo predstaviti u nekoj treoj (link) tabeli? Prvo pitanje moe biti jednostavno odgovoreno zavisi od kolone koju navodimo kao primarni klju. Preostala etiri pitanja su povezana, te njihovi odgovori zavise od veza izmeu objekata. Osim toga, ako vaa Customer klasa predstavlja odnos sa Email klasom preko nekog podtipa klase Collection ili niza, mogue je da korisnik ima vie email adresa. U tom sluaju klasa Customer bi izgledala kao na listingu 2-6. public class Customer { int customerId; int customerReference; String name; Set email; } Listing 2-5. Mogui izgled klase Customer.

15

Dakle, trebali bi dodati jo jedno pitanje: da li potroa moe imati vie od jedne email adrese? Set kolekcija moe sadravati samo jednu stavku, tako da automatski ne moemo znati kakav je sluaj. Kljuna pitanja iz prethodnih opcija su sledea: P1: Da li e-mail adresa moe pripadati vie od jednom korisniku? P2: Da li potroa moe imati vie od jedne e-mail adrese? Odgovori na ova pitanja se mogu formirati u tabeli istine, prikazane ispod. P1 Ne Da Ne Da P2 Ne Ne Da Da Odnos izmedju Customer I E-mail klasa Jedan-na-Jedan Jedan-na-vise Vise-na-jedan Vise-na-Vise

Odluivanje o kardinalitetu veze entiteta.

Ovo su ujedno etiri naina na koja se kardinalitet veza izmeu objekata moe predstaviti, Svaka od veza moe da se predstavi unutar tabela mapiranja na razliite naine. Asocijacija jedan-na-jedan Asocijacija jedan-na-jedan izmeu klasa se moe predstaviti na razliite naine. Najjednostavniji je atribute obje klase drati u istoj tabeli. Na primer, asocijacija izmeu klase User sa jednim atributom username, te klase Email se moe predstaviti u jednoj tabeli kao u tabeli ispod. ID 1 2 3 Username amer amila elma Email [email protected] [email protected] [email protected] Kombinovana tabela User/Email

Jedan entitet baze podataka koji predstavlja ovu kombinaciju klasa User i Email je prikazan na slici ispod. User 16

PK

id Username Email

Jedan entitet koji predstavlja odnos jedan-na-jedan Alternativno, entiteti se mogu odravati u razliitim tabelama sa identinim primarnim kljuevima ili sa kljuevima uvanim u jednom od entiteta, kao u tabelama Email i Email sa stranim kljucem na User tabeli. ID 1 2 3 Username amer amila elma Tabela User Email [email protected] [email protected] [email protected] Tabela Email

ID 1 2 3

Mogue je kreirati mandatorni strani klju kao vezu od jednog entiteta prema drugom, ali ovo ne bi trebali primjenjivati u oba smera jer bi se stvorila kruna zavisnost. Takoe je mogue potpuno izostaviti strane kljueve kao to se vidi na slici ispod i osloniti se na Hibernate u upravljanju izborom kljua i dodeli. User PK Id Username PK Email id Email Entiteti dovedeni u vezu sa identinim primarnim kljucevima Ukoliko nije pogodno za tabele da dele primarne kljueve, tada je veza sa stranim kljuem izmeu dve tabele sasvim podobna, uz unique ogranienje nad kolonom stranog kljua. Taj tip veze vidi se u tabeli ispod.

17

ID 34 35 36

Email [email protected] m [email protected]

UserID(Unique) 1 2

[email protected] 3 Email tabela sa stranim kljucem na User tabeli

Ovo ima prednost u tome da se asocijacija moe lako promeniti iz tipa jedan-najedan u tip vie-na-jedan jednostavnim uklanjanjem unique ogranienja. Slika ispod prikazuje ovaj tip veze.

Entiteti povezani stranim kljucem Asocijacija jedan-na-vie i vie-na-jedan Asocijacija tipa jedan-na-vie (ili iz perspektive druge klase, vie-na-jedan) se moe veoma jednostavno predstaviti stranim kljuem bez upotrebe drugih ogranienja. Ova veza se moe odravati i korienjem tabele veze. Ona e uvati strani klju na svaku od asociranih tabela, to e istovremeno initi primarni klju tabele link. Primer ovoga je prikazan u tabelama 1,2 i 3. ID Username 18

1

amer

2 amila 1. Jednostavna User tabela ID 1 2 3 4 2. Email [email protected] om [email protected] m [email protected] [email protected] m Jednostavna Email tabela

UserID 1 1 2

EmailID 1 2 3

2 4 3. Tabela veze koja vrsi spajanje korisnika i adrese u vezi jedan-na-vise Dodatne kolone mogu da se dodaju tabeli veze kako bi se odrala informacija o poretku entiteta u asocijaciji. Naravno potrebno je dodati unique ogranienje na jednu stranu veze ( na emailID kolonu tabele UserEmailLink na slici ispod ); u suprotnom tabela veze moe predstavljati skup svih moguih vrednosti izmeu entiteta User i Email to je asocijacija tipa vie-na-vie.

Odnos predstavljen tabelom veze 19

Asocijacija vie-na-vie Kao to je naglaeno na kraju prethodne sekcije, ukoliko unique ogranienje nije primenjeno na jedan kraj veze kada koristimo tabelu veze, onda odnos postaje ogranieni tip odnosa vie-na-vie. Mogue je prikazati sve kombinacije korisnika i email adrese, ali nije mogue da isti korisnik ima istu email adresu asociranu dva puta, jer bi to zahtevalo dupliranje kompozitnog primarnog kljua. Ukoliko umesto korienja stranih kljueva zajedno kao kompozitni primarni klju tabeli veze damo njen vlastiti primarni klju (obino surogat klju), asocijacija izmeu dva entiteta se moe transformisati u potpuno preslikavanje tipa vie-navie kao u tabeli ispod.

ID 1 2 3 4 5

UserID 1 1 1 1 2

EmailID 1 2 3 4 3

6 2 4 Veza za odnos vise-na-vise User/Email Tabela iznad opisuje situaciju u kojoj korisnik amer prima svu potu poslanu na bilo koju od etiri adrese, dok amila prima samo potu poslanu na njene adrese. Kada tabela veze ima svoj nezavisni primarni klju, kao u asocijaciji na slici 3-5, treba razmisliti o mogunosti kreiranja nove klase da predstavlja sadraj tabele veze kao zaseban entitet.

20

Veza vise-na-vise predstavljena tabelom veze

7. Specifikacije tipova kolona i velicina kod mapiranja

Java obezbjeuje primitivne tipove i dozvoljava korisniko definisanje interfejsa i klasa za njihovo proirenje. Relacione baze generalno obezbjeuju mali podskup standardnih tipova, a osim toga obezbjeuju i tipove specifine za bazu. Ograniavanje na specifine tipove moe izazvati dosta problema, obzirom da postoje samo aproksimativne podudarnosti izmeu njih i Java primitivnih tipova. Tipian primer problematinog tipa je java.lang.String (od strane Hibernate-a tretiran kao primitivni tip obzirom da se esto koristi), koji e po defaultu biti mapiran na znakovni tip fiksne veliine u bazi podataka. Tipino, izvrenje u bazi je sporo ukoliko je znakovno polje neograniene veliine ali dugaka String polja e biti odseena prilikom perzistencije u bazu. Preklapanjem mapiranja defaultnih tipova, programer moe uiniti odreeni balans izmeu skladinog prostora, performansi i privrenosti originalnoj Java reprezentaciji.

8. Mapiranje odnosa nasledjivanja na bazu

21

Ne postoji SQL standard za reprezentaciju odnosa nasljeivanja za podatke u tabeli; te iako neke implementacije baza podataka obezbeuju specifinu sintaksu za ovo, to im nije zajednika osobina. Ovde je bitno napomenuti da Hibernate obezbeuje nekoliko naina konfiguracije pomou kojih je mogue predstaviti odnose nasljeivanja, a datoteke mapiranja dozvoljavaju korisniku da izabere podoban pristup za njihov model.

[ LITERATURA ] Beginning Hibernate from Novice to Professional, Dave Minter and Jeff Linwood - [ Apress 2006]. 1. Beginning POJOs from Novice to Professional, Brian Sam Bodden [Apress 2006]. 2. [WEB RESURSI] 1. http://www.hibernate.org stranica projekta sa svim neophodnim resursima i dokumentacijom. 2. http://en.wikipedia.org online enciklopedija.

22