Java/Hibernate/Inversed Mapping

Материал из Java эксперт
Перейти к: навигация, поиск

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>