One To Many Bidirectional Map : Relation One to Many « Hibernate « Java






One To Many Bidirectional Map

/////////////////////////////////////////////////////////////////////////
import java.io.Serializable;
import java.util.*;

import org.hibernate.*;
import org.hibernate.cfg.*;
import org.hibernate.criterion.*;
import org.hibernate.event.*;
import org.hibernate.event.def.*;

public class Main {
   public static void main(String[] args) throws Exception {
      HibernateUtil.setup("create table grouptable (id int,name varchar);");    
      HibernateUtil.setup("create table story (id int,info varchar,idx int,parent_id int);");    

      Session session = HibernateUtil.currentSession();

      Group sp = new Group("Group Name");
     
      
      HashSet set = new HashSet();
      Story s = new Story("A Story");
      s.setParent(sp);
      set.add(s);
      sp.setStories(set);

      Transaction transaction = null;

      try {
           transaction = session.beginTransaction();
           session.save(sp);
           transaction.commit();
      } catch (Exception e) { 
           if (transaction != null) {
             transaction.rollback();
             throw e;
           }
      }  finally { 
           session.close();
      }
      HibernateUtil.checkData("select * from grouptable");
      HibernateUtil.checkData("select * from story");      
   }
}




/////////////////////////////////////////////////////////////////////////

import java.util.*;

public class Group {
  private int id;
  private String name;
  private Set stories;

  public Group(){
  }

  public Group(String name) {
    this.name = name;
  }

  public void setId(int i) {
    id = i;
  }

  public int getId() {
    return id;
  }

  public void setName(String n) {
    name = n;
  }

  public String getName() {
    return name;
  }

  public void setStories(Set l) {
    stories = l;
  }

  public Set getStories() {
    return stories;
  }
}



/////////////////////////////////////////////////////////////////////////
import java.util.*;

public class Story {
  private int id;
  private String info;
  private Group parent;
  
  public void setParent(Group g) {
    parent = g;
  }
  public Group getParent() {
    return parent;
  }
  public Story(){
  }

  public Story(String info) {
    this.info = info;
  }

  public void setId(int i) {
    id = i;
  }

  public int getId() {
    return id;
  }

  public void setInfo(String n) {
    info = n;
  }

  public String getInfo() {
    return info;
  }
}



/////////////////////////////////////////////////////////////////////////


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping 
    PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" 
    "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">

<hibernate-mapping>
    <class name="Group" table="grouptable">
        <id name="id" unsaved-value="0">
             <generator class="increment"/>
        </id>
    
        <set name="stories" cascade="all" inverse="true">
             <key column="parent_id"/>
             <one-to-many class="Story"/>
        </set>
        <property name="name" type="string"/>
    </class>
    
    <class name="Story" table="story">
        <id name="id" unsaved-value="0">
             <generator class="increment"/>
        </id>
        <property name="info"/>
        <many-to-one name="parent" column="parent_id" not-null="true"/>
    </class>
</hibernate-mapping>


/////////////////////////////////////////////////////////////////////////
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD//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 files -->
        <mapping resource="Group.hbm.xml"/>
    </session-factory>
</hibernate-configuration>



/////////////////////////////////////////////////////////////////////////
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

import java.sql.ResultSet;
import java.sql.ResultSetMetaData;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateUtil {

    public static final SessionFactory sessionFactory;

    static {
        try {
            // Create the SessionFactory from hibernate.cfg.xml
            sessionFactory = new Configuration().configure().buildSessionFactory();
        } catch (Throwable ex) {
            // Make sure you log the exception, as it might be swallowed
            System.err.println("Initial SessionFactory creation failed." + ex);
            throw new ExceptionInInitializerError(ex);
        }
    }

    public static final ThreadLocal session = new ThreadLocal();

    public static Session currentSession() throws HibernateException {
        Session s = (Session) session.get();
        // Open a new Session, if this thread has none yet
        if (s == null) {
            s = sessionFactory.openSession();
            // Store it in the ThreadLocal variable
            session.set(s);
        }
        return s;
    }

    public static void closeSession() throws HibernateException {
        Session s = (Session) session.get();
        if (s != null)
            s.close();
        session.set(null);
    }
    
    static Connection conn; 
    static Statement st;
  public static void setup(String sql) {
    try {
      // Step 1: Load the JDBC driver.
      Class.forName("org.hsqldb.jdbcDriver");
      System.out.println("Driver Loaded.");
      // Step 2: Establish the connection to the database.
      String url = "jdbc:hsqldb:data/tutorial";

      conn = DriverManager.getConnection(url, "sa", "");
      System.out.println("Got Connection.");

      st = conn.createStatement();
      st.executeUpdate(sql);
    } catch (Exception e) {
      System.err.println("Got an exception! ");
      e.printStackTrace();
      System.exit(0);
    }
  }
  public static void checkData(String sql) {
    try {
      HibernateUtil.outputResultSet(st
          .executeQuery(sql));
//      conn.close();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

    public static void outputResultSet(ResultSet rs) throws Exception{
    ResultSetMetaData metadata = rs.getMetaData();

    int numcols = metadata.getColumnCount();
    String[] labels = new String[numcols]; 
    int[] colwidths = new int[numcols];
    int[] colpos = new int[numcols];
    int linewidth;

      for (int i = 0; i < numcols; i++) {
        labels[i] = metadata.getColumnLabel(i + 1); // get its label
        System.out.print(labels[i]+"  ");
    }
      System.out.println("------------------------");

    while (rs.next()) {
        for (int i = 0; i < numcols; i++) {
        Object value = rs.getObject(i + 1);
        if(value == null){
            System.out.print("       ");
        }else{
            System.out.print(value.toString().trim()+"   ");
        }
        
      }
        System.out.println("       ");
    }
    }
}
           
       








HibernateOneToManyBidirectional.zip( 4,579 k)

Related examples in the same category

1.One To Many Mapping based on Set
2.One To Many Mapping based on Array
3.One To Many Mapping based on Bag
4.One To Many Mapping List
5.Mapping One To Many Set