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?setCourse 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();
????}
}

posted on 2009-01-12 14:50
JasonChou 閱讀(1391)
評論(5) 編輯 收藏 所屬分類:
j2ee