Java/Hibernate/Inversed Mapping

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

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.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>
        <!-- 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>





Inversed Mapping 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 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>
        <!-- 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>