Anotace a Hibernate

Transkript

Anotace a Hibernate
Anotace a Hibernate

Aleš Nosek

Ondřej Vadinský

Daniel Krátký
Anotace v Javě



novinka Javy 5
umožňují k Java kódu přidávat dodatečné
informace (podobně jako JavaDoc)
za předchůdce anotací je možné považovat
XDoclet, který k podobné funkcionalitě
používal právě JavaDoc komentáře
Anotace vs XDoclet


anotace jsou silnější
anotace mohou být použity při kompilaci, ale
mohou být také používány za běhu programu
(pomocí reflexe)
Příklad použití anotací

@Greet(text="Hello everyone")
public class Main {
public static void main(String[] args) {
System.out.println(new
Main().getClass().getAnnotation(Greet.class).text());
}
}
Anotace z Java API

@Deprecated



kompilátor vypíše varování
@Override



programátor by neměl takto označený element
používat
označená metoda má předefinovat metodu předka
pokud to nedělá (chyba programátora) kompilace
skončí chybou
@SupressWarning

pro daný element se nemá generovat specifický
warning
Ukázka

class A {
@Override public boolean equals(A a) { ... }
@Deprecated public void deprecatedMethod() { ... }
}


Kompilátor: „method does not override or implement a
method from a supertype“
Kompilátor: „The method deprecatedMethod() from
the type A is deprecated.“
ORM

Způsob transformace mezi objektovým a
relačním modelem může být definován:
1.Pomocí externího souboru (obvykle ve formátu
XML)
2.Pomocí speciálních JavaDoc komentářů
(v době, kdy nebyly anotace, viz XDoclet)
3.Pomocí anotací
Hibernate 2.x


používá mapovací XML soubory
- lze je generovat automaticky
(např. z existující databáze)
- může jich být velký počet
použití Xdocletu

při buildu vyžaduje jeden krok navíc
(spuštění preprocesoru)
Hibernate 3

použití anotací



zápis mapování přímo ve zdrojovém kódu => při
refactoringu si aplikace snáze zachová
aktuálnost OR mapování
jsou součástí byte kódu a čtou se za běhu
pomocí reflexe => není potřeba žádný externí
XML soubor
podpora nástroji např. IntelliJ IDEA, Eclipse
(doplňování kódu, označení syntaxe)
Použití anotací v Hibernate

Hibernate >= 3.2, Java 5

jar soubory:


hibernate-annotations.jar
(kromě standardních knihoven Hibernate)
lib/ejb3-persistence.jar
(Java Persistence API)
Použití anotací v Hibernate

získání Hibernate session factory:
sessionFactory = new
AnnotationConfiguration().buildSessionFactory();
Použití anotací v Hibernate

Deklarace perzistentních tříd v souboru
hibernate.cfg.xml:
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<mapping class="PlaneType"/>
<mapping class="ModelPlane"/>
</session-factory>
</hibernate-configuration>
Persistentní třídy



POJO = Plain Old Java Object
Třídy s privátními datovými atributy a
příslušnými veřejnými get/set metodami
Anotace upravují persistentní mapování na
tabulky v databázi
Příklad persistentní třídy
@Entity
public class ModelPlane {
private Long id;
@Id
public Long getId()
{
return id;
}
public void setId(Long
id)
{
this.id = id;
}
}
@Entity – Udává, že třída
je persistentní
@Id – označuje unikátní
atribut
Nepersistentní atributy




Anotace @Transient
Udává, že daný atribut se nebude ukládat, ani
načítat z databáze
Všechny ostatní atributy budou automaticky
brány jako persistentní
Zjednodušení oproti mapování přes XML
Generování primárních klíčů
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
public Long getId() {
return id;
}
Specifikace tabulky a sloupců


Anotace třídy: @Table(name="TABLE")
Udává jméno tabulky, do které se entita ukládá
a ze které se načítá

Anotace metody: @Column(name="COLUMN")

Přidává se ke get metodě daného atributu
Příklad
@Entity
@Table(name="T_MODEL_PLANE")
public class ModelPlane {
private Long id;
private String name;
@Id
@Column(name="PLANE_ID")
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@Column(name="PLANE_NAME")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Mapování sloupců



Je možné specifikovat v anotacích mnoho
vlastností spojených s daným sloupcem v
databázi
@Column(name="PLANE_ID", length=80,
nullable=true)
Příklad upřesňuje maximální délku záznamu na
80 znaků a povolenou nullovou hodnotu
Vlastnosti sloupce
@Column(
name="columnName";
boolean unique() default false;
boolean nullable() default true;
boolean insertable() default true;
boolean updatable() default true;
String columnDefinition() default "";
String table() default "";
int length() default 255;
int precision() default 0;
int scale() default 0;
)
Mapování vztahů




Jedna z nejdůležitějších a nejkomplexnějších
vlastností persistentního mapování
Mapování vztahů mezi tabulkami
Anotace tabulkových vztahů se udávají ke get
metodám
@JoinColumn(name="COLUMN") – název
sloupce, přes který se joinují tabulky
Druhy vztahů




@OneToOne
@ManyToOne
@OneToMany
@ManyToMany
Many-to-one aneb n:1



Jeden z nejčastějších vztahů mezi tabulkami je
many-to-one
@ManyToOne( cascade =
{CascadeType.PERSIST,
CascadeType.MERGE} )
CascadeType udává chování Hibernate při
kaskádových operacích, neboli při mazání
záznamů provázaných cizími klíči
Příklad mapování vztahů
@Entity()
public class Flight implements
Serializable {
private Company company;
@ManyToOne( cascade = CascadeType.PERSIST,
CascadeType.MERGE} )
@JoinColumn(name="COMP_ID")
public Company getCompany() {
return company;
}
...
}
Named query




Slouží k uložení speciálních dotazů
Možno provádět dotazy podle názvu přímo z
kódu
@NamedQueries
@NamedQuery
Příklad named query
@NamedQueries(
{
@NamedQuery(
name="planeType.findById",
query="select p from PlaneType p left join
fetch p.modelPlanes where id=:id"
),
@NamedQuery(
name="planeType.findAll",
query="select p from PlaneType p"
),
@NamedQuery(
name="planeType.delete",
query="delete from PlaneType where
id=:id"
)
}
)
Odkazy



Více informací na:
http://www.hibernate.org/hib_docs/annotations/reference/en
/html_single/
http://www.onjava.com/pub/a/onjava/2007/02/08/anintroduction-to-hibernate-3-annotations.html

http://www.scream.cz/2007/10/28/jemny-uvod-do-anotaci/

http://java.sun.com/j2se/1.5.0/docs/api/

http://en.wikipedia.org/wiki/Hibernate_%28Java%29

Podobné dokumenty

Anotace a Hibernate

Anotace a Hibernate public class Main { public static void main(String[] args) { System.out.println(new Main().getClass().getAnnotation(Greet.class).text());

Více

Prezentace ke stažení [PDF - 244 kB]

Prezentace ke stažení [PDF - 244 kB] for (String it : new String[] {"Rod", "Carlos", "Chris"}) if (it.length() <= 4) System.out.println(it);

Více

Applet Architektura Java EE - 4 vrstvá CGI

Applet Architektura Java EE - 4 vrstvá CGI - V zásadě stejné jako ze stand-alone aplikace - Pokud chceme pracovat se stále stejnou instancí, musíme si jí zapamatovat v session. - Pozor! Session Bean není HTTP Session - Nedoporučuje se pouţí...

Více

Nástroje pro vývoj aplikací v závislosti na platformě a jejich vazba na

Nástroje pro vývoj aplikací v závislosti na platformě a jejich vazba na GNU/Linux – Operační systém vycházející ze systémů unixového typu je postavený na opensource jádru Linux1. Podle tohoto jádra také bývá obvykle zkráceně nazýván. Určitým specifikem GNU/Linuxu je to...

Více

Září / říjen - Městský úřad Rokytnice nad Jizerou

Září / říjen - Městský úřad Rokytnice nad Jizerou nedobrovolných dražeb přišlo o pozemek bývalé školní zahrady. Pozemek v rámci dražeb koupil pan Jiří Liška a pan Jaroslav Budina. Pozemek zasahuje z horní strany až k objektu základní školy a leží ...

Více

Návrh webového systému řízení malé společnosti

Návrh webového systému řízení malé společnosti organizace práce, tak moudré nakládání s informacemi má pozitivní vliv na zisk. Praktickým prostředkem k dosahování právě popsaného se ukázaly být informační systémy (IS), což je jen moderní název ...

Více

text práce PDF - Katedra geoinformatiky

text práce PDF - Katedra geoinformatiky Primární impulsem pro téma disertační práce byla diskuze s operačními důstojníky Hasičského záchranného sboru s nabídkou možné projektové spolupráce na jedné z konferencí, které se autor zúčastnil ...

Více

S KOMIXem do Evropy

S KOMIXem do Evropy podobného druhu aplikací. Byla vytvořena softwarová aplikace skládající se ze dvou částí: modulu pro autonomní dávkové provádění jednotlivých činností, které souvisí se shromažďováním a dalším zpra...

Více