hibernate多对多例子

本文介绍了一个使用Hibernate实现的多对多关系映射的例子,包括创建学生和课程之间的关联表,定义Java实体类,编写Hibernate配置文件,并提供创建记录和查询记录的测试类。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

hibernate多对多例子-方便以后查看(三)

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

}

 

好。。可以了。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值