Inversed Mapping Cascade Loading
///////////////////////////////////////////////////////////////////////// import java.util.*; import org.hibernate.*; import org.hibernate.criterion.*; public class SimpleRetrieveTest { public static void main(String[] args) { HibernateUtil.setup("create table i_EVENTS ( uid int, name VARCHAR, start_Date date, duration int, location_id int);"); HibernateUtil.setup("create table i_speakers ( uid int, firstName VARCHAR, lastName VARCHAR, event int);"); // hibernate code start Session session = HibernateUtil.currentSession(); Transaction tx = session.beginTransaction(); EventInverse event = new EventInverse(); event.setName("Inverse test"); event.setSpeakers(new HashSet()); event.getSpeakers().add(new SpeakerInverse("John", "Smith", event)); event.getSpeakers().add(new SpeakerInverse("Dave", "Smith", event)); event.getSpeakers().add(new SpeakerInverse("Joan", "Smith", event)); session.save(event); event = (EventInverse) session.load(EventInverse.class, event.getId()); Set speakers = event.getSpeakers(); for (Iterator i = speakers.iterator(); i.hasNext();) { SpeakerInverse speaker = (SpeakerInverse) i.next(); System.out.println("Event Name:"+speaker.getEvent().getName()); System.out.println("Speaker First Name:"+speaker.getFirstName()); System.out.println("Speaker Last Name:"+speaker.getLastName()); } tx.commit(); HibernateUtil.closeSession(); HibernateUtil.sessionFactory.close(); HibernateUtil.checkData("select * from i_speakers"); HibernateUtil.checkData("select uid, name from i_events"); // hibernate code end } } ///////////////////////////////////////////////////////////////////////// import java.util.Date; import java.util.Set; public class EventInverse { private Long id; private String name; private Date startDate; private int duration; private Set speakers; private Set attendees; private LocationInverse 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 LocationInverse getLocation() { return location; } public void setLocation(LocationInverse 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="EventInverse" table="i_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="LocationInverse"/> <set name="speakers" cascade="all" inverse="true"> <key column="event_id"/> <one-to-many class="SpeakerInverse"/> </set> </class> </hibernate-mapping> ///////////////////////////////////////////////////////////////////////// <?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="SpeakerInverse" table="i_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"/> <many-to-one name="event" class="EventInverse"/> </class> </hibernate-mapping> ///////////////////////////////////////////////////////////////////////// public class SpeakerInverse { private Long id; private String firstName; private String lastName; private EventInverse event; public SpeakerInverse() { } public SpeakerInverse(String firstName, String lastName) { setFirstName(firstName); setLastName(lastName); } public SpeakerInverse(String firstName, String lastName, EventInverse event) { this(firstName, lastName); setEvent(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 EventInverse getEvent() { return this.event; } public void setEvent(EventInverse event) { this.event = event; } } ///////////////////////////////////////////////////////////////////////// <?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="EventInverse.hbm.xml"/> <mapping resource="SpeakerInverse.hbm.xml"/> <mapping resource="LocationInverse.hbm.xml"/> </session-factory> </hibernate-configuration>
1. | Inversed Mapping Cascade Save | ![]() |