Hibernate映射List

        Hibernate映射集合操作,List!

        一、POJO

package example.start.list;

import java.util.ArrayList;
import java.util.List;

public class Person
{
 private int id;
 private String name;
 private int age;
 private List schools = new ArrayList();  
  
 public Person()
 {
 }

 public int getId()
 {
  return id;
 }

 public void setId(int id)
 {
  this.id = id;
 }

 public String getName()
 {
  return name;
 }

 public void setName(String name)
 {
  this.name = name;
 }

 public int getAge()
 {
  return age;
 }

 public void setAge(int age)
 {
  this.age = age;
 }

 public List getSchools()
 {
  return schools;
 }

 public void setSchools(List schools)
 {
  this.schools = schools;
 }

 

}
       二、Person.hbm.xml

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

<hibernate-mapping>
    <class name="example.start.list.Person" table="person">
        <id name="id" column="personid">
            <generator class="identity"/>
        </id>
        <property name="name" type="string">
            <column name="name"/>
        </property>
        <property name="age" type="integer">
            <column name="age" />
        </property>
           
       <list name="schools" table="school">
         <key column="personid" not-null="true"/>
         <list-index column="list_order"/>
         <element type="string" column="school_name"/>
       </list>
    </class>
</hibernate-mapping>

        三、测试文件

package example.start.list;
import java.util.ArrayList;
import java.util.List;

import org.hibernate.Session;
import org.hibernate.Transaction;
import com.HibernateSessionFactory;

public class CreateAndStorePerson
{
 
 public static void main(String[] args)
 {
  Session session = HibernateSessionFactory.getSession();
  Transaction tx = session.beginTransaction();
  
  Person yeeku = new Person();
  yeeku.setAge(22);
  yeeku.setName("List"); 
  
  List s = new ArrayList();
  s.add("中学"); 
  s.add("大学");
    
  yeeku.setSchools(s);
    
  session.save(yeeku);
  tx.commit();
  HibernateSessionFactory.closeSession();
  
 }

}

 

       四、HibernateSessionFactory

package com;

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

/**
 * Configures and provides access to Hibernate sessions, tied to the current
 * thread of execution. Follows the Thread Local Session pattern, see
 * {@link http://hibernate.org/42.html }.
 */
public class HibernateSessionFactory
{

 /**
  * Location of hibernate.cfg.xml file. Location should be on the classpath
  * as Hibernate uses #resourceAsStream style lookup for its configuration
  * file. The default classpath location of the hibernate config file is in
  * the default package. Use #setConfigFile() to update the location of the
  * configuration file for the current session.
  */
 private static String      CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";
 private static final ThreadLocal<Session> threadLocal    = new ThreadLocal<Session>();
 private static Configuration    configuration   = new Configuration();
 private static org.hibernate.SessionFactory sessionFactory;
 private static String      configFile    = CONFIG_FILE_LOCATION;

 static
 {
  try
  {
   configuration.configure(configFile);
   sessionFactory = configuration.buildSessionFactory();
  }
  catch (Exception e)
  {
   System.err.println("%%%% Error Creating SessionFactory %%%%");
   e.printStackTrace();
  }
 }

 private HibernateSessionFactory()
 {
 }

 /**
  * Returns the ThreadLocal Session instance. Lazy initialize the
  * <code>SessionFactory</code> if needed.
  *
  * @return Session
  * @throws HibernateException
  */
 public static Session getSession() throws HibernateException
 {
  Session session = (Session) threadLocal.get();

  if (session == null || !session.isOpen())
  {
   if (sessionFactory == null)
   {
    rebuildSessionFactory();
   }
   session = (sessionFactory != null) ? sessionFactory.openSession()
     : null;
   threadLocal.set(session);
  }

  return session;
 }

 /**
  * Rebuild hibernate session factory
  */
 public static void rebuildSessionFactory()
 {
  try
  {
   configuration.configure(configFile);
   sessionFactory = configuration.buildSessionFactory();
  }
  catch (Exception e)
  {
   System.err.println("%%%% Error Creating SessionFactory %%%%");
   e.printStackTrace();
  }
 }

 /**
  * Close the single hibernate session instance.
  *
  * @throws HibernateException
  */
 public static void closeSession() throws HibernateException
 {
  Session session = (Session) threadLocal.get();
  threadLocal.set(null);

  if (session != null)
  {
   session.close();
  }
 }

 /**
  * return session factory
  */
 public static org.hibernate.SessionFactory getSessionFactory()
 {
  return sessionFactory;
 }

 /**
  * return session factory session factory will be rebuilded in the next call
  */
 public static void setConfigFile(String configFile)
 {
  HibernateSessionFactory.configFile = configFile;
  sessionFactory = null;
 }

 /**
  * return hibernate configuration
  */
 public static Configuration getConfiguration()
 {
  return configuration;
 }

}

 

        五 hibernate.cfg.xml

<?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">

<!-- Generated by MyEclipse Hibernate Tools.                   -->
<hibernate-configuration>

 <session-factory>

  <!--<property name="connection.url">jdbc:mysql://localhost:3306/hibernate</property>-->
  <property name="connection.url">jdbc:mysql://localhost:3306/hibernate</property>
  <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
  <property name="myeclipse.connection.profile">org.gjt.mm.mysql.Driver</property>
  <property name="connection.username">root</property>
  <property name="connection.password">root</property>
  <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
  <property name="show_sql">true</property>
  <property name="jdbc.fetch_size">50</property>
  <property name="jdbc.batch_size">30</property>


  <mapping resource="example/start/list/Person.hbm.xml" />

 </session-factory>

</hibernate-configuration>

 

        六、数据表

      

person 表 
id  int  11                          name  vachar 255                      age   int 11

school表

personid  int 11                  school_name  vacher 255        list_index     int  11

 

 

 

注:

      映射List集合,List集合是个有序的集合,所以要使用<list-index column="list_order"/>来标明其顺序,使用关联的外键和集合的次序来作为联合主键。
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值