随笔 - 59  文章 - 70  trackbacks - 0
<2009年1月>
28293031123
45678910
11121314151617
18192021222324
25262728293031
1234567

常用链接

留言簿(5)

随笔分类

随笔档案

搜索

  •  

积分与排名

  • 积分 - 172977
  • 排名 - 338

最新评论

阅读排行榜

评论排行榜

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

}

posted on 2009-01-12 14:50 JasonChou 阅读(1372) 评论(5)  编辑  收藏 所属分类: j2ee

FeedBack:
# re: Hibernate多对多more-to-more实例 2009-05-15 01:22 啊龙
先建好了表?????  回复  更多评论
  
# re: Hibernate多对多more-to-more实例 2009-05-15 09:05 JasonChou
@啊龙
是啊 有何不妥?  回复  更多评论
  
# re: Hibernate多对多more-to-more实例[未登录] 2010-01-18 09:39 lq
加上struts实现个增删改查例子看看啦  回复  更多评论
  
# re: Hibernate多对多more-to-more实例 2010-01-18 11:01 JasonChou
@lq
struts例子网上很多的,你再找找  回复  更多评论
  
# re: Hibernate多对多more-to-more实例 2016-04-19 16:09 
同是要求返回两张表的字段,该如何查询,如何确定返回类型  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: