STUDIO DI HIBERNATE ATTRAVERSO I COSTRUTTI DEL MODELLO RELAZIONALE Università degli Studi di Padova Facoltà di Ingegneria Corso di Laurea Triennale in Ingegneria Informatica Tesi di Laurea STUDIO DI HIBERNATE ATTRAVERSO I COSTRUTTI DEL MODELLO RELAZIONALE Relatore: Prof. Giorgio Maria Di Nunzio 26 Luglio 2012 Laureando: Marco Carraro Anno Accademico 2011/2012
Problema: Letteratura vasta da Java a relazionale ma non viceversa Università degli studi di Padova Tesi di Laurea Studio di Hibernate attraverso i costrutti del modello relazionale HIBERNATE Problema: Letteratura vasta da Java a relazionale ma non viceversa 26 Luglio 2012 Marco Carraro
Università degli studi di Padova Tesi di Laurea Studio di Hibernate attraverso i costrutti del modello relazionale Obiettivi della tesi 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
Classi Java rappresentanti i concetti (POJO) Università degli studi di Padova Tesi di Laurea Studio di Hibernate attraverso i costrutti del modello relazionale Di cosa ha bisogno Hibernate per capire come realizzare un modello relazionale?? Classi Java rappresentanti i concetti (POJO) Files di mappatura (in XML) solitamente uno per classe Ritagliare le immagini??? 26 Luglio 2012 Marco Carraro
Struttura tipico file di mappatura: <!Doctype….> Università degli studi di Padova Tesi di Laurea Studio di Hibernate attraverso i costrutti del modello relazionale Struttura tipico file 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> Ritagliare le immagini??? 26 Luglio 2012 Marco Carraro
ESEMPIO: ASSOCIAZIONE UNO A MOLTI CON ATTRIBUTI COMUNI Università degli studi di Padova Tesi di Laurea Studio di Hibernate attraverso i costrutti del modello relazionale ESEMPIO: ASSOCIAZIONE UNO A MOLTI CON ATTRIBUTI COMUNI TRADUZIONE IN SCHEMA RELAZIONALE SCELTA: Ritagliare le immagini??? 26 Luglio 2012 Marco Carraro
3 file XML di mappatura - Item Università degli studi di Padova Tesi di Laurea Studio di Hibernate attraverso i costrutti del modello relazionale Necessari sei file: - User 3 classi Java - Item - Buyer 3 file XML di mappatura - Item Ritagliare le immagini??? 26 Luglio 2012 Marco Carraro
User.java => usa Set USER.JAVA FRAMMENTO USER.HBM.XML Università degli studi di Padova Tesi di Laurea Studio di Hibernate attraverso i costrutti del modello relazionale User.java => usa Set USER.JAVA FRAMMENTO USER.HBM.XML public class User { private Long id; private String login; private java.util.Set<Buyer> items= new java.util.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> Ritagliare le immagini??? 26 Luglio 2012 Marco Carraro
Item.java => contiene oggetto di tipo User Università degli studi di Padova Tesi di Laurea Studio di Hibernate attraverso i costrutti del modello relazionale Item.java => contiene oggetto di tipo User 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> Ritagliare le immagini??? 26 Luglio 2012 Marco Carraro
FRAMMENTO BUYER.HBM.XML Università degli studi di Padova Tesi di Laurea Studio di Hibernate attraverso i costrutti del modello relazionale Buyer.java => classe intermedia necessaria per raccogliere attributi comuni 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; Ritagliare le immagini??? 26 Luglio 2012 Marco Carraro
NOTA: Su Item della relazione BUYER c’è un vincolo unique Università degli studi di Padova Tesi di Laurea Studio di Hibernate attraverso i costrutti del modello relazionale Problema => schema relazionale ottenuto diverso da quello di partenza Schema voluto: Schema ottenuto: Ritagliare le immagini??? NOTA: Su Item della relazione BUYER c’è un vincolo unique 26 Luglio 2012 Marco Carraro
Notevole riduzione codice necessario per persistenza Università degli studi di Padova Tesi di Laurea Studio di Hibernate attraverso i costrutti del modello relazionale CONCLUSIONI - 1 Vantaggi introdotti: Notevole riduzione codice necessario per persistenza Elevato riutilizzo codice tra applicazioni diverse => classi più leggibili Miglior controllo delle performance con DataBase Connection Pool Ritagliare le immagini??? 26 Luglio 2012 Marco Carraro
Introduzione di latenza rispetto alla soluzione con JDBC Università degli studi di Padova Tesi di Laurea Studio di Hibernate attraverso i costrutti del modello relazionale CONCLUSIONI - 2 Svantaggi: Introduzione di latenza rispetto alla soluzione con JDBC Compatibilità non completa con tutti i modelli relazionali Ritagliare le immagini??? 26 Luglio 2012 Marco Carraro