Many To Many Map Cascade Load
///////////////////////////////////////////////////////////////////////// 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); event = (EventManyToMany) session.load(EventManyToMany.class, event.getId()); Set speakers = event.getSpeakers(); for (Iterator i = speakers.iterator(); i.hasNext();) { SpeakerManyToMany speaker = (SpeakerManyToMany) i.next(); System.out.println(speaker.getFirstName()); System.out.println(speaker.getLastName()); System.out.println(speaker.getId()); } 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="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); } } ///////////////////////////////////////////////////////////////////////// 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="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> ///////////////////////////////////////////////////////////////////////// <?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!-- Database connection settings --> <property name="connection.driver_class">org.hsqldb.jdbcDriver</property> <property name="connection.url">jdbc:hsqldb:data/tutorial</property> <property name="connection.username">sa</property> <property name="connection.password"></property> <!-- JDBC connection pool (use the built-in) --> <property name="connection.pool_size">1</property> <!-- SQL dialect --> <property name="dialect">org.hibernate.dialect.HSQLDialect</property> <!-- Echo all executed SQL to stdout --> <property name="show_sql">true</property> <mapping resource="EventManyToMany.hbm.xml"/> <mapping resource="SpeakerManyToMany.hbm.xml"/> <mapping resource="LocationManyToMany.hbm.xml"/> </session-factory> </hibernate-configuration>
1. | Collection Mapping: Many-To-Many map based on HashMap | ![]() | |
2. | Many to Many Map Cascade Save | ![]() |