Hibernate多对多 关联映射(many-to-many)

Hibernate多对多 关联映射(many-to-many)

在操作和性能方面都不太理想,所以多对多的映射使用较少,实际使用中最好转换成一对多的对象模型;

Hibernate会为我们创建中间关联表,转换成两个一对多

映射文件配置如下:




 

图示如下:

Hibernate多对多 关联映射(many-to-many)_第1张图片

多对多(student - course)  => 两个一对多

Hibernate多对多 关联映射(many-to-many)_第2张图片

Student实体domain类如下:

public class Student implements java.io.Serializable{
	private static final long serialVersionUID = 1L;
	private Integer id;
	private String name;
	private Set studcourses;
	给id和name,studcourses属性  set和get方法
}


Course实体domain类如下:

public class Course implements Serializable {
	private static final long serialVersionUID = 1L;
	private Integer id;
	private String name;
	private Set studcourses
	给id,name,studcourses属性  set和get方法
}


Studcourse实体domain类如下:

public class M2MStudcourse implements Serializable {

	private static final long serialVersionUID = 1L;
	private Integer id;
	private Student student;
	private Course course;
	private Integer grade;
		给所有的属性  set和get方法
}
 
   

Student的映射文件 Student.hbm.xml如下:




	
		
			
				Student_seq
			
		
		
			
		
		
			
			
		
	

Course的映射文件 Course.hbm.xml如下:




	
		
			
				Course_seq
			
		
		
			
		
		
		
			
			
		
	

Studcourse的映射文件 Studcourse.hbm.xml如下:




	
		
			
				Studcourse_seq
			
		
		
			
		
		
		
	

hibernate.cfg.xml   关键配置如下:





	
		oracle.jdbc.driver.OracleDriver
	
	scott
	tiger
	
		?????
	
	
		org.hibernate.dialect.Oracle9Dialect
	

	true
	
		oracle.jdbc.driver.OracleDriver
	
	update
	
	
	

测试如下:

public static void main(String[] args) {
		// TODO Auto-generated method stub
		Session session=null;
		Transaction tx=null;
		try {
			session=HibernateUtil.getCurrentSession();
			tx=session.beginTransaction();
			
			//doing something
			Student s=new Student();
			s.setName("jojo3");
			Course c=new Course();
			c.setName("j2ee");
			Studcourse sc=new Studcourse();
			sc.setGrade(45);
			sc.setCourse(c);
			sc.setStudent(s);
			session.save(c);
			session.save(s);
			session.save(sc);
			
			tx.commit();
		} catch (Exception e) {
			// TODO: handle exception
			if (tx!=null) {
				tx.rollback();
			}
			throw new RuntimeException(e.getMessage());
		}finally{
			if (session!=null&&session.isOpen()) {
				session.close();
			}
		}
		
	}

关键代码,请看红色部分!



你可能感兴趣的:(Hibernate)