Anotace a Hibernate
Transkript
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
public class Main {
public static void main(String[] args) {
System.out.println(new
Main().getClass().getAnnotation(Greet.class).text());
Prezentace ke stažení [PDF - 244 kB]
for (String it : new String[] {"Rod", "Carlos",
"Chris"})
if (it.length() <= 4)
System.out.println(it);
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ţí...
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...
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ží ...
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 ...
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 ...
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...