Anotace a Hibernate. Aleš Nosek Ondřej Vadinský Daniel Krátký

Podobné dokumenty
public static void main(string[] args) { System.out.println(new Main().getClass().getAnnotation(Greet.class).text());

Platforma Java. Petr Krajča. Katedra informatiky Univerzita Palackého v Olomouci. Petr Krajča (UP) KMI/PJA: Seminář V. 27. říjen, / 15

Object-relational mapping (JPA, Hibernate)

KIV/PIA 2013 Jan Tichava

UJO Framework. revoluční architektura beans. verze

Java a XML. 10/26/09 1/7 Java a XML

Programování v Javě I. Leden 2008

PREPROCESOR POKRAČOVÁNÍ

Enterprise Java Beans 3.0

Obsah přednášky 9. Skrývání informací. Skrývání informací. Zapouzdření. Skrývání informací. Základy programování (IZAPR, IZKPR) Přednáška 9

Algoritmizace a programování

PA165: Persistence Layer. Petr Adámek

DPKOM_06 Dědičnost entit a zpětná volání posluchači

Programování v Javě I. Únor 2009

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

JAVA V Hibernate Java, letní semestr

8 Třídy, objekty, metody, předávání argumentů metod

Zapouzdření. Tomáš Pitner, upravil Marek Šabo

Úvod do programovacích jazyků (Java)

Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV)

public class Karel { private int position; public boolean issmiling; public int getposition() { return position;

Úvod do programování - Java. Cvičení č.4

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

1. Téma 12 - Textové soubory a výjimky

Typický prvek kolekce pro české řazení

7. Datové typy v Javě

Statické proměnné a metody. Tomáš Pitner, upravil Marek Šabo

Generické programování

1. Programování proti rozhraní

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Výčtový typ strana 67

Počítačové laboratoře bez tajemství aneb naučme se učit algoritmizaci a programování s využitím robotů CZ.1.07/1.3.12/

Teoretické minimum z PJV

Seminář Java II p.1/43

Jazyk C# (seminář 6)

ANT. Aplikační programování v Javě (BI-APJ) - 1 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

PŘETĚŽOVÁNÍ OPERÁTORŮ

Datové typy v Javě. Tomáš Pitner, upravil Marek Šabo

George J. Klir. State University of New York (SUNY) Binghamton, New York 13902, USA

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Doxygen. Jakub Břečka

Databázové systémy. - SQL * definice dat * aktualizace * pohledy. Tomáš Skopal

KMI / TMA Tvorba mobilních aplikací. 6. seminář ZS 2016/2017 Středa 13:15-15:45

Java Enum Java, zimní semestr ,2017 1

Vybrané partie z jazyka Java Spring a Enterprise JavaBeans (EJB)

Úvod do programovacích jazyků (Java)

Základy jazyka C# Obsah přednášky. Architektura.NET Historie Vlastnosti jazyka C# Datové typy Příkazy Prostory jmen Třídy, rozhraní

Lambda funkce Novinky v interfaces Streamy Optional - aneb zbavujeme se null. Java 8. Ondřej Hrstka

Univerzita Palackého v Olomouci Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 3.4.

3 Vývojová prostředí, základní prvky jazyka Java, konvence jazyka Java

typová konverze typová inference

Stream API. Petr Krajča. Základy programovaní 4 (Java) Katedra informatiky Univerzita Palackého v Olomouci

Návrh softwarových systém. Návrh softwarových systémů

Testovací metoda. Testovací metoda. public class SimpleTest {

Algoritmizace a programování

Univerzita Palackého v Olomouci Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 26.3.

7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd

Michal Podzimek

20. Projekt Domácí mediotéka

OMO. 4 - Creational design patterns A. Singleton Simple Factory Factory Method Abstract Factory Prototype Builder IoC

(Enterprise) JavaBeans. Lekce 7

5 Rekurze a zásobník. Rekurzivní volání metody

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Abstraktní datové typy: zásobník

Iterator & for cyklus

Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat.

První kapitola úvod do problematiky

TÉMATICKÝ OKRUH Softwarové inženýrství

Vlákno odlehčený proces kód vlákna, zásobník privátní ostatní sdíleno s dalšími vlákny téhož procesu

Tvorba WWW stránek. přehled technologií používaných na webu principy jednotlivých technologií a možnosti jejich vzájemného kombinování

České vysoké učení technické v Praze Fakulta elektrotechnická

Principy objektově orientovaného programování

Správa paměti. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta, 2016

Databáze. Velmi stručný a zjednodušený úvod do problematiky databází pro programátory v Pythonu. Bedřich Košata

RMI Remote Method Invocation

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat.

Obsah přednášky. 12. Dokumentace zdrojového kódu Tvorba elektronické dokumentace UML. Co je diagram tříd. Ing. Ondřej Guth

Google Web Toolkit. Martin Šurkovský, SUR března Katedra informatiky

Neměnné objekty. Tomáš Pitner, upravil Marek Šabo

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

1. Dědičnost a polymorfismus

Úvod do programování v jazyce Java

OSGi. Aplikační programování v Javě (BI-APJ) - 6 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha

X-komponenty 3.1. Uživatelská příručka. J. Kocman, V. Trojan

7 Formátovaný výstup, třídy, objekty, pole, chyby v programech

IRAE 07/08 Přednáška č. 1

Programovací jazyk Java

Nasazení Object Relation Mapping nástrojů nad legacy datovým modelem

Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat.

Návrh a tvorba WWW stránek 1/14. PHP a databáze

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Jak správně na Hibernate. Martin Hlavatý

Rezervační systém Tvorba WWW stránek

Oracle XML DB. Tomáš Nykodým

STARÁ DOBRÁ JAVA A PERSISTENCE S CACHÉ

Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV)

Čipové karty Lekařská informatika

Spring framework 2.0. Roman Pichlík CZJUG

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 programátor by neměl takto označený element používat kompilátor vypíše varování @Override 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; @Entity Udává, že třída je persistentní @Id označuje unikátní atribut public void setid(long id) { this.id = id;

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