Hibernate

Technology
12 hours ago
8
4
2
Avatar
Author
Albert Flores

Hibernate je framework napsaný v jazyce Java, který umožňuje tzv. objektově relační mapování (ORM). Usnadňuje řešení otázky zachování dat objektů i po ukončení běhu aplikace. Je jednou z implementací Java Persistence API (JPA).

Historie

Projekt vytvořil Gavin King, který později spolu s Hibernate přešel pod křídla firmy JBoss. Ta byla v roce 2006 převzata firmou Red Hat, která nadále pokračuje ve vývoji frameworku Hibernate. +more Gavin King spolu s JBoss také přešel do RedHatu.

Co dělá Hibernate

Hibernate poskytuje způsob, pomocí něhož je možné zachovat stav objektů mezi dvěma spuštěnými aplikacemi. Říkáme tedy, že udržuje data persistentní. +more Dosahuje toho pomocí ORM, což znamená, že mapuje Javovské objekty na entity v relační databázi. K tomu používá tzv. mapovací soubory, ve kterých je popsáno, jakým způsobem se mají data z objektu transformovat do databáze a naopak a jakým způsobem se z databázových tabulek mají vytvořit objekty. Druhý způsob jak mapovat objekty je použít anotace místo mapovacích souborů. V Hibernate se tedy pracuje s běžnými business objekty, přičemž mohou být sloupce tabulky spojeny přímo s atributy objektu, nebo mohou být připojeny skrze metody get/set a metody hashCode a equals. Nutno podotknout, že nelze použít EJB (viz Java Bean), ale pouze klasické objekty - tzv. POJO (Plain Old Java Object). Poté, co jsou objekty uložené v databázi se na ně lze dotazovat jazykem HQL (Hibernate Query Language), který je odvozen z SQL a je mu tedy velice podobný.

Mapování

a) mapovací soubory

Jedná se soubory ve formátu XML s příponou „. hbm. +morexml“ (tedy např. Zajezd. hbm. xml), kdy pro jednu třídu máme jeden soubor, obvykle umístěný ve stejném balíčku jako samotná třída. Ve struktuře mapovacího souboru se používají např. tagy nebo . Prvním se popisuje normální datový atribut třídy. Tagem se také popisuje atribut, ale tentokrát má speciální význam, protože udržuje odkazy na související objekty. (Např. objekt „Zajezd“ by měl atribut typu Set jménem „cestujici“, který by obsahoval odkazy na objekty jednotlivých cestujících).

b) anotace

Anotace lze použít dvěma způsoby - buďto u atributů nebo u jejich getterů. Následují výpisy, které ukazují použití obojího.

Použití anotací u atributů:

@Entity(access = AccessType.FIELD) @Table (name="ZAJEZD") public class Zajezd {

@Id (generate = GeneratorType.AUTO) private Long id;

@Column (length=100, nullable=false, unique=true) private String nazev;

@Column (length=100) private String atribut1;

@Column (length=30) private String atribut2;

private Set cestujici;

}

Použití anotací u metod:

@Entity(access = AccessType.PROPERTY) @Table (name="ZAJEZD") public class Zajezd {

private Long id, private String nazev; private String atribut1; private String atribut2; private Set cestujici;

@Id (generate = GeneratorType.AUTO) public int getId { return id; }

@Column (length=100) public String getNazev { return nazev; }

@Column (length=100) public String getAtribut1 { return atribut1; }

@Column (length=30) public String getAtribut2 { return atribut2; }

public void setNazev(String nazev) { this.nazev = nazev; }

... }

Konfigurační soubor pro Hibernate

Hibernate potřebuje pro správnou funkci několik nastavení, jako je JDBC driver, adresa databáze (connection string), generátor SQL dotazů (dialect) nebo cesty k mapovacím souborům. Tento konfigurační soubor se běžně pojmenovává „hibernate. +morecfg. xml“.

org.gjt.mm.mysql.Driver

org.hibernate.dialect.MySQL5InnoDBDialect

jdbc:mysql://server/databaze

uzivatel heslo

create

HQL - Hibernate Query Language

Preferovaný způsob práce s objekty je HQL (oproti SQL). Syntaxe je SQL velice podobná, ale HQL je, na rozdíl od SQL, objektově orientované, takže rozumí věcem jako dědičnost, polymorfismus, apod. +more Dotaz „from java. lang. Object o“ by tedy vrátil úplně všechny persistentní objekty. Nejjednodušší dotaz vypadá takto: „from Zajezd“ - vrátí všechny instance třídy Zajezd.

Pokud se v dotazu chceme odvolávat na „Zajezd“, je potřeba mu přiřadit alias: „from Zajezd as zajezd“ - je zvykem pojmenovávat aliasy stejným slovem jako název třídy, ale podle konvence, kterou pojmenováváme atributy. Použili bychom toho následujícím způsobem: „from Zajezd as zajezd where zajezd. +morenazev = nazev“.

HQL podporuje klasické konstrukce, na které jsme zvyklí z SQL, jako jsou: INNER a OUTER JOIN, klauzule WHERE nebo WITH, agregační výrazy jako AVG nebo COUNT, subdotazy, atd. Další zajímavostí je QBE - Query by Example. +more Jedná se o způsob dotazování, kdy vytvoříme nový objekt s vlastnostmi, které hledáme a tento objekt poté předáme do HQL a ten nám vrátí objekty se stejnými vlastnostmi.

Zajezd z = new Zajezd; z.setCestujici(cestujici); z.setNazev(„Nazev Zajezdu“); List vysledek = session.createCriteria(Zajezd.class) .add( Example.create(z) ) .list;

V předchozím příkladu byla použita konstrukce „Criteria“. QBE je ve skutečnosti pouze jedním z více druhů kritérií, které můžeme pro dotazy zavádět. +more V obecnější rovině vypadají kritéria následovně:.

Criteria crit = sess.createCriteria(Zajezd.class); crit.setMaxResults(50); List zajezdy = crit.list;

nebo:

List zajezdy = sess. createCriteria(Zajezd. +moreclass) . add( Restrictions. like("nazev", "Kostarika%") ) . add( Restrictions. or( Restrictions. eq( "atribut1", hledanaHodnota ), Restrictions. isNull("atribut2") ) ) . list;.

Výhody používání Hibernate

Hibernate, framework pro perzistentní vrstvu, usnadňuje programátorovi práci tím, že nemusí transformovat objekty do relací ručně, ale přenechá to perzistentní vrstvě. Zároveň jsou tím odstíněna specifika jednotlivých databází - programátor používá API Hibernate.

Související články

Doctrine (PHP) * Entity Framework

Odkazy

Související články

:en:Java Persistence API * :en:Object Relational Mapping * :en:Data Access Object * :en:Java Data Objects * :en:Ebean * :en:EclipseLink * :en:TopLink

Externí odkazy

[url=http://www. hibernate. +moreorg]Oficiální stránky Hibernate[/url] * [url=http://www. javafree. org/artigo/871462/Interview-with-Gavin-King-founder-of-Hibernate. html]Interview s tvůrcem Hibernate - Gavinem Kingem[/url].

Další podobné frameworky

[url=http://java. sun. +morecom/javaee/technologies/persistence. jsp]Java Persistence API - JPA[/url] * [url=http://www. thoughtinc. com]CocoBase[/url] * [url=http://openjpa. apache. org]OpenJPA[/url] * [url=http://www. springsource. org]Spring Framework[/url].

Kategorie:Java

5 min read
Share this post:
Like it 8

Leave a Comment

Please, enter your name.
Please, provide a valid email address.
Please, enter your comment.
Enjoy this post? Join Cesko.wiki
Don’t forget to share it
Top