Hibernate之many-to-many分析

package  org.myhibernate;
public   class  TestDemo
{
 
public static void main(String[] args)
 
{
  Student s1
=new Student();
  Student s2
=new Student();
  Student s3
=new Student();
  s1.setStuname(
"zhangsan");
  s2.setStuname(
"lisi");
  s3.setStuname(
"wangwu");
  
  Teacher t1
=new Teacher();
  Teacher t2
=new Teacher();
  Teacher t3
=new Teacher();
  t1.setTeaname(
"professor zhang");
  t2.setTeaname(
"professor li");
  t3.setTeaname(
"professor wang");
  
  s1.getTeachers().add(t1);
  s1.getTeachers().add(t2);
  s1.getTeachers().add(t3);
  
  s2.getTeachers().add(t2);
  s2.getTeachers().add(t3);
  
  s3.getTeachers().add(t3);
  
  StuDAO so
=new StuDAO();
  so.save(s1);
  so.save(s2);
  so.save(s3);
 }

}

Hibernate之many-to-many
原理:数据库中的多对多实现方式,一般采用对存在多对多关系的两个对象表,建立多对多关联表,就是用一个独立的表来存放两个表的主键字段,通过遍历这张关系表来获取两表的关联关系。
在hibernate中,多对多通过两者对象类中互相建立双方的类对象集合。在hbm映射文件中,通过<many-to-many>标签实现两者的多对多关联。
demo:学生和老师的关系,学生可以选择若干老师,老师也教若干学生
1、数据库
     create   table  `testdb`.`student`(
        `stuid` 
int   not   null  auto_increment,
       `stuname` 
varchar ( 50 ),
        
primary   key  (`stuid`)
    );
    
create   unique   index  ` PRIMARY on  `testdb`.`student`(`stuid`);

    
create   table  `testdb`.`teacher`(
        `teaid` 
int   not   null  auto_increment,
       `teaname` 
varchar ( 50 ),
        
primary   key  (`teaid`)
    );
    
create   unique   index  ` PRIMARY on  `testdb`.`teacher`(`teaid`);
    
    
create   table  `testdb`.`stu_tea_table`(
        `stuid` 
int ,
       `teaid` 
int
    );

2、创建eclipse的hibernate支持
3、生成并student表和teacher表的hbm映射跟相应的POJO类,注意不必生成stu_tea_table的hbm和POJO
4、修改POJO类

// Student.java
package  org.myhibernate;
import  java.util.HashSet;
import  java.util.Set;
/**
 * Student generated by MyEclipse Persistence Tools
 
*/

public   class  Student  implements  java.io.Serializable
{
 
// Fields
 private Integer stuid;
 
private String stuname;
private Set teachers=new HashSet();
 
// Constructors
 /** default constructor */
 
public Student()
 
{
 }

 
/** full constructor */
 
public Student(String stuname)
 
{
  
this.stuname = stuname;
 }

 
// Property accessors
 public Integer getStuid()
 
{
  
return this.stuid;
 }

 
public void setStuid(Integer stuid)
 
{
  
this.stuid = stuid;
 }

 
public String getStuname()
 
{
  
return this.stuname;
 }

 
public void setStuname(String stuname)
 
{
  
this.stuname = stuname;
 }

public Set getTeachers()
 
{
  
return teachers;
 }

public void setTeachers(Set teachers)
 
{
  
this.teachers = teachers;
 }

}

// Teacher.java
package  org.myhibernate;
import  java.util.HashSet;
import  java.util.Set;
/**
 * Teacher generated by MyEclipse Persistence Tools
 
*/

public   class  Teacher  implements  java.io.Serializable
{
 
// Fields
 private Integer teaid;
 
private String teaname;
private Set students=new HashSet();
 
// Constructors
 /** default constructor */
 
public Teacher()
 
{
 }

 
/** full constructor */
 
public Teacher(String teaname)
 
{
  
this.teaname = teaname;
 }

 
// Property accessors
 public Integer getTeaid()
 
{
  
return this.teaid;
 }

 
public void setTeaid(Integer teaid)
 
{
  
this.teaid = teaid;
 }

 
public String getTeaname()
 
{
  
return this.teaname;
 }

 
public void setTeaname(String teaname)
 
{
  
this.teaname = teaname;
 }

public Set getStudents()
 
{
  
return students;
 }

public void setStudents(Set students)
 
{
  
this.students = students;
 }

}



5、修改hbm映射

6、DAO类
// StuDAO.java
package  org.myhibernate;
import  org.hibernate.Session;
public   class  StuDAO
{
 
public void save(Student s)
 
{
  Session session
=HibernateSessionFactory.getSession();
  session.save(s);
  session.beginTransaction().commit();
 }

}


// TeaDAO.java
package  org.myhibernate;
import  org.hibernate.Session;
public   class  TeaDAO
{
 
public void save(Teacher t)
 
{
  Session session
=HibernateSessionFactory.getSession();
  session.save(t);
  session.beginTransaction().commit();
 }

}




7、测试类
 
package  org.myhibernate;
public   class  TestDemo
{
 
public static void main(String[] args)
 
{
  Student s1
=new Student();
  Student s2
=new Student();
  Student s3
=new Student();
  s1.setStuname(
"zhangsan");
  s2.setStuname(
"lisi");
  s3.setStuname(
"wangwu");
  
  Teacher t1
=new Teacher();
  Teacher t2
=new Teacher();
  Teacher t3
=new Teacher();
  t1.setTeaname(
"professor zhang");
  t2.setTeaname(
"professor li");
  t3.setTeaname(
"professor wang");
  
  s1.getTeachers().add(t1);
  s1.getTeachers().add(t2);
  s1.getTeachers().add(t3);
  
  s2.getTeachers().add(t2);
  s2.getTeachers().add(t3);
  
  s3.getTeachers().add(t3);
  
  StuDAO so
=new StuDAO();
  so.save(s1);
  so.save(s2);
  so.save(s3);
 }

}


 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值