Java/Hibernate/Inversed Mapping
Inversed Mapping Cascade Loading
<source lang="java">
/////////////////////////////////////////////////////////////////////////
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.rumit(); 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> <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> <property name="connection.pool_size">1</property> <property name="dialect">org.hibernate.dialect.HSQLDialect</property> <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>
</source>
Inversed Mapping Cascade Save
<source lang="java">
///////////////////////////////////////////////////////////////////////// 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); tx.rumit(); HibernateUtil.closeSession(); HibernateUtil.sessionFactory.close(); HibernateUtil.checkData("select * from i_speakers"); HibernateUtil.checkData("select uid, name from i_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="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>
/////////////////////////////////////////////////////////////////////////
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="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> <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> <property name="connection.pool_size">1</property> <property name="dialect">org.hibernate.dialect.HSQLDialect</property> <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>
</source>