STUDIO DI HIBERNATE ATTRAVERSO I COSTRUTTI DEL MODELLO RELAZIONALE Università degli Studi di Padova Dipartimento di Ingegneria Dell’informazione Corso di Laurea Triennale in Ingegneria Informatica Tesi di Laurea STUDIO DI HIBERNATE ATTRAVERSO I COSTRUTTI DEL MODELLO RELAZIONALE Laureando: Marco Carraro 26 Luglio 2012 Relatore: Prof. Giorgio Maria Di Nunzio Anno Accademico 2011/2012
Esempio implementazione associazione uno a molti Conclusioni SOMMARIO Hibernate Obiettivi POJO e file XML Esempio implementazione associazione uno a molti Conclusioni 26 Luglio 2012 Marco Carraro 2/15
Problema: Persistenza degli oggetti Hibernate Problema: Persistenza degli oggetti 26 Luglio 2012 Marco Carraro 3/15
Obiettivi Fornire documentazione sull’implementazione di schemi relazionali con Hibernate Analizzare vantaggi introdotti da Hibernate ed eventuali incompatibilità con alcuni schemi relazionali 26 Luglio 2012 Marco Carraro 4/15
Classi Java rappresentanti i concetti (POJO) POJO e XML - 1 Di cosa ha bisogno Hibernate per mappare le classi nel modello relazionale? Classi Java rappresentanti i concetti (POJO) File di mappatura (in XML) solitamente uno per classe 26 Luglio 2012 Marco Carraro 5/15
POJO e XML - 2 Esempio POJO: public class Classe{ private long id; … public Classe(){} //setter and getter //other methods } 26 Luglio 2012 Marco Carraro 6/15
POJO e XML - 3 Struttura tipico file XML di mappatura: <!Doctype….> <hibernate-mapping> <class> <id>Def id</id> <param name=“attr” not-null=“true” unique=“true”/> <one-to-one …/> <one-to-many …/> <many-to-one …/> <many-to-many …/> </class> </hibernate-mapping> 26 Luglio 2012 Marco Carraro 7/15
Associazione Uno a Molti - 1 Esempio Associazione Uno a Molti - 1 Traduzione in schema relazionale scelta: 26 Luglio 2012 Marco Carraro 8/15
Associazione Uno a Molti - 2 Esempio Associazione Uno a Molti - 2 Per il funzionamento necessari 6 file User.java 3 classi Java Item.java Buyer.java User.hbm.xml 3 file XML Item.hbm.xml Buyer.hbm.xml 26 Luglio 2012 Marco Carraro 9/15
Associazione Uno a Molti - 3 Esempio Associazione Uno a Molti - 3 USER.JAVA FRAMMENTO USER.HBM.XML import java.util.Set; import java.util.HashSet; public class User { private long id; private String login; private Set<Buyer>items=new HashSet<Buyer>(); // constructors setter and getter } … <property name=“login” not-null=“true”/> <set name="items" table="BUYER"> <key column="BUYER_ID"/> <one-to-many class="Buyer"/> </set> 26 Luglio 2012 Marco Carraro 10/15
Associazione Uno a Molti - 4 Esempio Associazione Uno a Molti - 4 ITEM.JAVA FRAMMENTO ITEM.HBM.XML public class Item { private Long id; private String name; private String description; private User buyer=null; //constructors, setter and getter } … <join table="BUYER" inverse="true"> <key column="ITEM_ID" unique="true"/> <many-to-one name="buyer" class="User" column="BUYER_ID"/> </join> 26 Luglio 2012 Marco Carraro 11/15
Associazione Uno a Molti - 5 Esempio Associazione Uno a Molti - 5 BUYER.JAVA FRAMMENTO BUYER.HBM.XML <class name="Buyer" table="BUYER" mutable="false"> <composite-id name="id" class="Buyer$Id"> <key-property name="itemId" access="field" column="ITEM_ID"/> <key-property name="userId" access="field" column="BUYER_ID"/> </composite-id> <property name="amount" column="AMOUNT"/ > <many-to-one name="user” not-null="true" insert="false" update="false"/> <many-to-one name="item” not-null="true" insert="false" update="false"/> </class> public class Buyer { public static class Id{ private long itemId; private long userId; //constructors, getter and setter } private Id id=new Id(); private User user; private Item item; private double amount; 26 Luglio 2012 Marco Carraro 12/15
Associazione Uno a Molti - 6 Esempio Associazione Uno a Molti - 6 Problema: schema relazionale ottenuto diverso da quello di partenza Schema voluto: Schema ottenuto: Vincolo: Su Item della relazione BUYER c’è un vincolo unique 26 Luglio 2012 Marco Carraro 13/15
Notevole riduzione codice necessario per persistenza Conclusioni - 1 Vantaggi: Notevole riduzione codice necessario per persistenza Elevato riutilizzo codice tra applicazioni diverse Miglior controllo delle performance con DataBase Connection Pool 26 Luglio 2012 Marco Carraro 14/15
Introduzione di latenza rispetto alla soluzione con JDBC Conclusioni - 2 Svantaggi: Introduzione di latenza rispetto alla soluzione con JDBC Compatibilità non completa con tutti i modelli relazionali 26 Luglio 2012 Marco Carraro 15/15