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 Laureando: Marco Carraro Anno Accademico 2011/2012 26 Luglio 2012 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 2 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 3 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 26 Luglio 2012 Marco Carraro 4 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> 26 Luglio 2012 Marco Carraro 5 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: 26 Luglio 2012 Marco Carraro 6 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 - User • 3 file XML di mappatura - Item - Buyer 26 Luglio 2012 Marco Carraro 7 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>(); … <property name=“login” not-null=“true”/> <set name="items" table="BUYER"> <key column="BUYER_ID"/> <one-to-many class="Buyer"/> </set> … // constructors setter and getter } 26 Luglio 2012 Marco Carraro 8 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> … } 26 Luglio 2012 Marco Carraro 9 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 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; //constructors, getter and setter } 26 Luglio 2012 <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> Marco Carraro 10 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: NOTA: Su Item della relazione BUYER c’è un vincolo unique 26 Luglio 2012 Marco Carraro 11 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 26 Luglio 2012 Marco Carraro 12 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 26 Luglio 2012 Marco Carraro 13