Many to Many Map Cascade Save : Relation Many to Many « Hibernate « Java






Many to Many Map Cascade Save

/////////////////////////////////////////////////////////////////////////


import java.util.*;

import org.hibernate.*;
import org.hibernate.criterion.*;

public class SimpleRetrieveTest {
  
  
  public static void main(String[] args) {
    HibernateUtil.setup("create table m_EVENTS ( uid int, name VARCHAR, start_Date date, duration int, location_id int);");
    HibernateUtil.setup("create table m_speakers ( uid int, firstName VARCHAR, lastName VARCHAR);");
    HibernateUtil.setup("create table event_speakers (elt int, event_id int, speaker_id int);");
    
    // hibernate code start
    Session session = HibernateUtil.currentSession();
    Transaction tx = session.beginTransaction();


        EventManyToMany event = new EventManyToMany();
        event.setName("Inverse test");
        event.setSpeakers(new HashSet());
        event.getSpeakers().add(new SpeakerManyToMany("John", "Smith", event));
        event.getSpeakers().add(new SpeakerManyToMany("Dave", "Smith", event));
        event.getSpeakers().add(new SpeakerManyToMany("Joan", "Smith", event));


        session.save(event);


        tx.commit();
    HibernateUtil.closeSession();

    HibernateUtil.sessionFactory.close();

        HibernateUtil.checkData("select * from m_speakers");
        HibernateUtil.checkData("select uid, name from m_events");        
    // hibernate code end
  }
  
}


/////////////////////////////////////////////////////////////////////////
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 2.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">

<hibernate-mapping>
    <class name="EventManyToMany" table="m_events">
        <id name="id" column="uid" type="long" unsaved-value="null">
            <generator class="increment"/>
        </id>
        <property name="name" type="string" length="100"/>
        <property name="startDate" column="start_date"
                  type="date"/>
        <property name="duration" type="integer"/>
        <many-to-one name="location" column="location_id"
                     class="LocationManyToMany"/>
        <set name="speakers" table="event_speakers" cascade="all">
            <key column="event_id"/>
            <many-to-many class="SpeakerManyToMany"/>
        </set>
    </class>
</hibernate-mapping>





/////////////////////////////////////////////////////////////////////////
import java.util.Date;
import java.util.Set;

public class EventManyToMany {

  private Long id;
  private String name;
  private Date startDate;
  private int duration;
  private Set speakers;
    private Set attendees;
    private LocationManyToMany location;

  public void setId(Long id) {
    this.id = id;
  }
  
  public Long getId() {
    return id;
  }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Date getStartDate() {
        return startDate;
    }

    public void setStartDate(Date startDate) {
        this.startDate = startDate;
    }

    public int getDuration() {
        return duration;
    }

    public void setDuration(int duration) {
        this.duration = duration;
    }

    public LocationManyToMany getLocation() {
        return location;
    }

    public void setLocation(LocationManyToMany location) {
        this.location = location;
    }

  public void setSpeakers(Set speakers) {
    this.speakers = speakers;
  }
  
  public Set getSpeakers() {
    return speakers;
  }

    public Set getAttendees() {
        return attendees;
    }

    public void setAttendees(Set attendees) {
        this.attendees = attendees;
    }

}




/////////////////////////////////////////////////////////////////////////
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 2.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">

<hibernate-mapping>
    <class name="SpeakerManyToMany" table="m_speakers">
        <id name="id" column="uid" type="long">
            <generator class="increment"/>
        </id>
        <property name="firstName" type="string" length="20"/>
        <property name="lastName" type="string" length="20"/>
        <set name="events" table="event_speakers" cascade="all">
            <key column="speaker_id"/>
            <many-to-many class="EventManyToMany"/>
        </set>
    </class>
</hibernate-mapping>




/////////////////////////////////////////////////////////////////////////

import java.util.Set;
import java.util.HashSet;

public class SpeakerManyToMany {

    private Long id;
    private String firstName;
    private String lastName;
    private Set events;

    public SpeakerManyToMany() {
    }

    public SpeakerManyToMany(String firstName, String lastName) {
        setFirstName(firstName);
        setLastName(lastName);
    }

    public SpeakerManyToMany(String firstName, String lastName, EventManyToMany event) {
        this(firstName, lastName);
        addEvent(event);
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public Set getEvents() {
        return this.events;
    }

    public void setEvents(Set events) {
        this.events = events;
    }

    private void addEvent(EventManyToMany event) {
        if (events == null) {
            events = new HashSet();
        }
        events.add(event);
    }
}


/////////////////////////////////////////////////////////////////////////
           
       








HibernateManytoManyMapCascadingSave.zip( 4,586 k)

Related examples in the same category

1.Collection Mapping: Many-To-Many map based on HashMap
2.Many To Many Map Cascade Load