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();
????}
}
?
好。。可以了。。