Many-to-many si ha quando un record di una tabella può essere collegato con tanti record su un altra tabella,e viceversa.
ogni PERSONA può avere più CONTICORRENTI e ogni CONTOCORRENTE può appartanere a più PERSONE.
File : Persona.java
package com.prova;
import java.util.HashSet;
import java.util.Set;
public class Persona implements java.io.Serializable {
private Integer personaId;
private Set<ContoCorrente> contiCorrenti= new HashSet<ContoCorrente>(0);
//getter, setter and constructor
}
File : ContoCorrente.java
package com.prova;
import java.util.HashSet;
import java.util.Set;
public class ContoCorrente implements java.io.Serializable {
private Integer contoCorrenteId;
private Set<Persona> persone= new HashSet<Persone>(0);
//getter, setter and constructor
}
File : Persona.hbm.xml
<class name=”com.prova.Persona” table=”persona” catalog=”provadb”>
<id name=”personaId” type=”java.lang.Integer”>
<column name=”PERSONA_ID” />
<generator class=”identity” />
</id>
<set name=”conticorrenti” table=”unione”
inverse=”false” lazy=”true” fetch=”select” cascade=”all” >
<key>
<column name=”PERSONA_ID” not-null=”true” />
</key>
<many-to-many entity-name=”com.prova.ContoCorrente”>
<column name=”CONTO_CORRENTE_ID” not-null=”true” />
</many-to-many>
</set>
</class>
</hibernate-mapping>
File : ContoCorrente.hbm.xml
<hibernate-mapping>
<class name=”com.prova.ContoCorrente” table=”contocorrente” catalog=”mkyongdb”>
<id name=”contoCorrenteId” type=”java.lang.Integer”>
<column name=”CONTO_CORRENTE_ID” />
<generator class=”identity” />
</id>
<set name=”persone” table=”unione” inverse=”true” lazy=”true” fetch=”select”>
<key>
<column name=”CONTO_CORRENTE_ID” not-null=”true” />
</key>
<many-to-many entity-name=”com.prova.Persona”>
<column name=”PERSONA_ID” not-null=”true” />
</many-to-many>
</set>
</class>
</hibernate-mapping>
Testiamo il tutto
File : App.java
public class App {
public static void main(String[] args) {
System.out.println(“Hibernate many to many (XML Mapping)”);
Session session = HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
Persona persona = new Persona();
ContoCorrente contoCorrente1 = new ContoCorrente ();
ContoCorrente contoCorrente2= new ContoCorrente ();
Set<ContoCorrente > contoCorrenti= new HashSet<ContoCorrente >();
contoCorrenti.add(contoCorrente1 );
contoCorrenti.add(contoCorrente1 );
persona.setContiCorrenti(contoCorrenti);
session.save(persona);
session.getTransaction().commit();
System.out.println(“Done”);
}
}