Mega Code Archive

 
Categories / Java / Hibernate
 

One To Many Mapping based on Bag

///////////////////////////////////////////////////////////////////////// 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");             ArrayList list = new ArrayList();       list.add(new Story("Story Name 1"));       list.add(new Story("Story Name 2"));       sp.setStories(list);       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");          } } ///////////////////////////////////////////////////////////////////////// <?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>           <bag name="stories" cascade="all">                  <key column="parent_id"/>                  <one-to-many class="Story"/>           </bag>           <property name="name" type="string"/>     </class>     <class name="Story" table="story">           <id name="id" unsaved-value="0">           <generator class="increment"/>           </id>           <property name="info"/>     </class> </hibernate-mapping> ///////////////////////////////////////////////////////////////////////// import java.util.*; public class Group {   private int id;   private String name;   private List 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(List l) {     stories = l;   }   public List getStories() {     return stories;   } } ///////////////////////////////////////////////////////////////////////// import java.util.*; public class Story {   private int id;   private String info;   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-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("       ");     }     } }                                 HibernateOneToManyMappingBag.zip( 4,578 k)