jpahibernate

 

questa volta analizziamo la relazione MANY-TO-MANY. di solito, quando ho una relazione MANY-TO-MANY, devo usare una tabella d’appoggio dove mantengo i riferimenti delle due tabelle che fanno parte della relazione. Di solito la tabella che viene creata ha il nome composto dall’unione delle due tabelle, serparate da _. Per esempio se ho due tabelle ORDINE e ITEM si ha ORDINE_ITEM, come tabella. All’interno di questa tabella metto le due chiavi delle due tabelle. in questo caso la tabella sarà:

 

ORDINE_ITEM(ID_ORDINE, ID_ITEM)

 

facciamo un esempio per capire meglio quando usare questa relazione. Supponiamo di avere un’Ordine, una tabella che contiene la lista degli ordini su AMAZON. Ogni Ordine è composto da un insieme di articoli, come ad esempio libri su JAVA, telefoni, Computer ecc.

 

La relazione è MANY-TO-MANY, perchè ogni ordine è composto da 1.. N prodotti ( ITEM) e un ITEM sarà presente in tanti ordini. A livello di database, che cosa succede? si crea una tabella che si chiamerà ORDINI_ITEM e che contiene le due chiavi delle due tabelle.

 

ORDINI_ITEM( ID_ORDINE, ID_ITEM)

 

vediamo come viene tradotto in JPA.

 

@Entity
@Table
public class Ordini
{

@ManyToMany
@JoinTable(name = “ORDINI_ITEM”,
joinColumns = @JoinColumn(name = “ID_ORDINE”,
referencedColumnName = “ID_ORDINE”),
inverseJoinColumns = @JoinColumn(name = “ID_ITEM”,
referencedColumnName = “ID_ITEM”))
private Collection<Item> item;

 

 

per rendere la relazione bidirezionale, invece, annoto l’entity ITEM, in questo modo:

 

 

@Entity
@Table
public class Item
{

@ManyToMany(mappedBy=”item”)
private Collection<Ordine> ordine;

 

in questo caso, ho inserito mappedby, e ho messo lo stesso nome ( item), che ho dato nell’entity Ordini.

Annunci