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