多对多

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="pojo.Classes" table="t1_Classes">
<id name="cid" column="cid">
<generator class="increment"></generator>
</id>
<property name="cname" column="cname" length="20"/>
<!-- table属性石第三方关联表的名字 -->
<set name="students" table="t_classes_student" cascade="update-save">
<!-- 在关联表中user的外键字段的名字 -->
<key column="classesid"></key>
<!-- 属性roles对应的第三方关联表中 对应的外键列的名字叫roleid -->
<many-to-many class="pojo.Student" column="studentsid"></many-to-many>
</set>
</class>
</hibernate-mapping>

 

------------------------

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="pojo">
<class name="Student" table="t1_student">
<id name="sid" column="sid">
<generator class="increment"></generator>
</id>
<property name="sname" column="sname" length="20"></property>
<set name="Classes" table="t_classes_student"  cascade="update-save" inverse="true">
<key column="studentsid"></key>
<many-to-many class="pojo.Classes" column="classesid" >
</many-to-many>
</set>
</class>
</hibernate-mapping>

----------------------

【CreateTableUtil】

public class CreateTableUtil {
 public static void main(String[] args) {
  Configuration cfg = new Configuration();
  cfg.configure();
  //工具利用持久化类和映射文件生成数据库架构
  SchemaExport export = new SchemaExport(cfg);
  //第一个true是将sql语句输出在控制台,第二个true,根据持久类和配置文件,先删除表,再创建表
  export.create(true,true);
 }
}

---------------------

【HibernateUtils】

public class HibernateUtils {
 private static SessionFactory sessionFactory;
 static{
 //创建读取配置文件的对象
 Configuration configuration =new Configuration();
 //加载hibernate配置文件
 configuration.configure();
 //加载配置文件以后,到ServiceRegistry 类中进行注册,表示我需要使用sessionFactory ,需要获取使用证明
 ServiceRegistry serviceRegistry =new StandardServiceRegistryBuilder()
 .applySettings(configuration.getProperties())
 .build();//换了
 //.getBootstrapServiceRegistry();
 //通过使用证明,获取sessionfory对象
 sessionFactory =configuration.buildSessionFactory(serviceRegistry);
 }
 //获取sessionFactory
 public static SessionFactory getSessionFactory(){
  return sessionFactory;
 //创建session
 }
 public static Session getSession(){
  return sessionFactory.openSession();
 }
}

-------------

【StudentTest】

public class StudentTest {
  private Session session;
  @Test
  public void test_select(){
   session.beginTransaction();
   Classes c= (Classes)session.load(Classes.class, 1);
   System.out.println(c.getCname());
   Set<Student> ss= c.getStudents();
   for(Student s: ss){
    System.out.println(s.getSname());
   }
  }
  @Test
  public void test_select2(){
   session.beginTransaction();
   Student s= (Student)session.load(Student.class, 1);
   System.out.println(s.getClass()+"==="+s.getSname());
  }
  @Test
  public void test_delete(){//删除表关系
   session.beginTransaction();
   try {
    Student s= (Student)session.get(Student.class,2);
   // System.out.println(s.getSname());
    Classes c= (Classes)session.get(Classes.class,1);
    s.setClasses(null);
    c.getStudents().remove(s);
    session.getTransaction().commit();
   } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    session.beginTransaction().rollback();
   }
  }
  @Test
  public void test_init(){
   session.beginTransaction();
   try {
    Classes c= new Classes();
    c.setCname("班级614");
    Set<Student> ss= new HashSet<Student>();
    
    for (int i = 0; i <=10; i++) {
     Student s= new Student();
     s.setSname("张三"+i);
     s.setClasses(c);
     session.save(s);
     ss.add(s);
    }
    c.setStudents(ss);
    session.getTransaction().commit();
   } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    session.getTransaction().rollback();
   }
  }
  @Before
  public void beforeGetSession(){
   session =HibernateUtils.getSession();
  }
  @After
  public void closeSession(){
   session.clear();
   session.close();
  }
}

posted @ 2015-07-06 19:16  水月洞天1  阅读(121)  评论(0编辑  收藏  举报