hibernate多对多例子学习笔记,转自:http://www.blogjava.net/wujun/archive/2006/04/08/39956.html?1.建表
hibernate多对多例子
学习笔记,转自:http://www.blogjava.net/wujun/archive/2006/04/08/39956.html
?
1.建表

?create???table??student

(sid??varchar?(?32?)??not???null???primary???key?,

?sname??varchar?(?16?),

?sage??varchar?(?16?),

)


?create???table??course

(cid??varchar?(?32?)??not???null???primary???key?,

cname??varchar?(?16?)

)


?create???table??student_course_link

(sid??varchar?(?32?)??not???null?,

cid??varchar?(?32?)??not???null?,

?primary???key?(sid,cid)

)

2.写VO
StudentVO

package?com.test;

import?java.util.Set;

public?class?Student

{

????private?String?sid;

????private?String?sname;

????private?String?sage;


????private?Set?course;

????public?Student()

????{

????}

???//写上get?set
Course vo

package?com.test;


import?java.util.Set;


public?class?Course

{

????private?String?cid;

????private?String?cname;

????private?Set?student;

???//写上get?set
写配置文件
Student.hbm.xml

<?xml?version="1.0"?>

<!DOCTYPE?hibernate-mapping

????PUBLIC?"-//Hibernate/Hibernate?Mapping?DTD//EN"

????"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">


<hibernate-mapping>


????<class?name="com.test.Student"?table="student"?>


????????<id?name="sid"?type="string"?unsaved-value="null"?>

????????????<column?name="sid"?sql-type="char(32)"?not-null="true"/>

????????????<generator?class="uuid.hex"/>

????????</id>


????????<property?name="sname">

????????????<column?name="sname"?sql-type="varchar(16)"?not-null="true"/>

????????</property>


????????<property?name="sage">

????????????<column?name="sage"?sql-type="varchar(16)"?not-null="true"/>

????????</property>


????????<set?name="course"?table="student_course_link"?cascade="all"?outer-join="false">

????????????<key?column="sid"/>

????????????<many-to-many?class="com.test.Course"?column="cid"/>

????????</set>

???

????</class>


</hibernate-mapping>
Course.hbm.xml

<?xml?version="1.0"?>

<!DOCTYPE?hibernate-mapping

????PUBLIC?"-//Hibernate/Hibernate?Mapping?DTD//EN"

????"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">


<hibernate-mapping>


????<class?name="com.test.Course"?table="course"?>


????????<id?name="cid"?type="string"?unsaved-value="null"?>

????????????<column?name="cid"?sql-type="char(32)"?not-null="true"/>

????????????<generator?class="uuid.hex"/>

????????</id>


????????<property?name="cname">

????????????<column?name="cname"?sql-type="varchar(16)"?not-null="true"/>

????????</property>


????????<set?name="student"?table="student_course_link"?lazy="false"?cascade="all">

????????????<key?column="cid"/>

????????????<many-to-many?class="com.test.Student"?column="sid"/>

????????</set>

???

????</class>


</hibernate-mapping>
接着把下面的hibernate.properties文件拷到classes目录下。。这里用的是mysql

hibernate.query.substitutions?true?1,?false?0,?yes?'Y',?no?'N'

##?MySQL

hibernate.dialect?net.sf.hibernate.dialect.MySQLDialect

hibernate.connection.driver_class?org.gjt.mm.mysql.Driver

hibernate.connection.url?jdbc:mysql://localhost:3306/wjcms

hibernate.connection.username?root

hibernate.connection.password?wujun

hibernate.connection.pool_size?1

hibernate.proxool.pool_alias?pool1

hibernate.show_sql?true

hibernate.jdbc.batch_size?0

hibernate.max_fetch_depth?1

hibernate.cache.use_query_cache?true?
写测试类了..

package?com.test;


import?net.sf.hibernate.Session;

import?net.sf.hibernate.SessionFactory;

import?net.sf.hibernate.cfg.Configuration;

import?net.sf.hibernate.*;

import?java.util.Set;

import?java.util.HashSet;

import?java.sql.*;

import?java.util.List;

import?java.util.Iterator;


public?class?TestManyToMany

{

????SessionFactory?sf;

????Session?session;

????public?TestManyToMany()

????{

????????try

????????{

????????????Configuration?cfg?=?new?Configuration();

????????????sf?=?cfg.addClass(Student.class).addClass(Course.class).buildSessionFactory();

????????}

????????catch(HibernateException?ex)

????????{

????????????ex.printStackTrace();

????????}

????}

????public?void?doCreate()

????{

????????try

????????{

????????????session?=?sf.openSession();


????????????Student?student?=?new?Student();

????????????student.setSname("小王");

????????????student.setSage("22");


????????????Set?courseSet?=?new?HashSet();

????????????Course?course?=?null;

????????????for(int?i=0;i<2;i++)

????????????{

????????????????course?=?new?Course();

????????????????if(i==0)

????????????????????course.setCname("c++");

????????????????else?if(i==1)

????????????????????course.setCname("java");

????????????????courseSet.add(course);

????????????}

????????????student.setCourse(courseSet);

????????????

????????????session.save(student);

????????????session.flush();

????????????session.connection().commit();


????????}

????????catch(HibernateException?ex)

????????{

????????????ex.printStackTrace();

????????}

????????catch(SQLException?ex1)

????????{

????????????ex1.printStackTrace();

????????}

????????finally

????????{

????????????????try{

????????????????????session.close();

????????????????}

????????????????catch(HibernateException?ex2){

????????????????}

????????}


????}

????public?void?doQuery()

????{

????????try{

????????????session?=?sf.openSession();

????????????Query?q?=?session.createQuery("select?s?from?Student?as?s");

????????????List?l?=?q.list();

????????????Student?s?=?null;

????????????Course?course?=?null;

????????????for(int?i=0;i<l.size();i++)

????????????{

????????????????s?=?(Student)l.get(i);

????????????????System.out.println("姓名:?"+s.getSname());

????????????????System.out.println("年龄:?"+s.getSage());

????????????????System.out.println("所选的课程:");

????????????????Iterator?it?=?s.getCourse().iterator();

????????????????while(it.hasNext())

????????????????{

????????????????????course?=?(Course)it.next();

????????????????????System.out.println("课程名:?"+course.getCname());

????????????????}



????????????}


????????}

????????catch(HibernateException?ex){

????????????ex.printStackTrace();

????????}

????????finally{

????????????try{

????????????????session.close();

????????????}

????????????catch(HibernateException?ex2){

????????????}

????????}

????}

????public?static?void?main(String[]?args)

????{

????????TestManyToMany?t?=?new?TestManyToMany();

????????//t.doCreate();

????????t.doQuery();

????}

}

?
好。。可以了。。