`

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

 

分享到:
评论

相关推荐

    Hibernate的多对一和一对多操作实例

    在关系型数据库设计中,多对一和一对多是两种非常基础且重要的关联关系类型。多对一指的是多个实体(如订单)与一个实体(如客户)之间的关联,而一对多则是指一个实体(如客户)可以拥有多个相关联的实体(如订单)...

    Hibernate双向一对多经典实例

    1. **Hibernate基础**:Hibernate是一个开源的ORM框架,它允许开发者通过Java对象来操作数据库,减少了手动编写SQL的繁琐工作。 2. **一对多关系**:在数据库设计中,一对多关系表示一个表中的记录可以与另一个表中...

    Hibernate 基础.ppt

    【Hibernate 基础】是Java开发中一个重要的部分,主要关注如何将对象模型与关系数据库进行映射,以简化...对于初学者来说,深入理解Hibernate的基础知识,熟练掌握其配置和使用方法,是提升Java开发技能的关键一步。

    hibernate框架基础教程适合新手

    Hibernate支持一对一、一对多、多对一和多对多关系映射,如List、Set、Map等集合类型,通过配置XML映射文件来实现复杂的数据结构。 10. **延迟加载与立即加载** 延迟加载(Lazy Loading)是Hibernate的一个重要...

    Hibernate多对多的映射

    一、Hibernate多对多映射基础 多对多映射在数据库中表现为两个表通过一个中间表(或称为连接表)相互关联。例如,学生和课程的关系,一个学生可以选修多门课程,而一门课程也可以被多个学生选修。在Hibernate中,...

    hibernate基础技术

    Hibernate 是一个开源的对象关系...以上内容涵盖了Hibernate基础技术的核心要点,通过学习和实践,开发者能够熟练地利用Hibernate进行数据库操作,提升开发效率。记得每个概念都要配合实例进行练习,以加深理解和掌握。

    Hibernate基础学习源码

    本资源“Hibernate基础学习源码”提供了五个不同阶段的学习示例,分别命名为Hibernate_01至Hibernate_04以及Hibernate_M2M,涵盖了Hibernate的基本概念、配置、实体映射、CRUD操作以及多对多关系的处理。 1. **...

    HIbernate基础包

    在本"Hibernate基础包"中,包含了用于SSH开发所需的全部核心库,使得开发者能够快速搭建项目并进行数据库交互。 首先,Hibernate的核心功能在于它的ORM(对象关系映射)机制。ORM允许开发者通过Java对象来操作...

    hibernate4.2基础jar包

    Hibernate是一款强大的Java持久化框架,它为Java开发者提供了一种对象关系映射工具来管理Java应用中的关系数据。...如果你的项目需要与关系型数据库打交道,那么理解和掌握Hibernate的使用将会非常有益。

    hibernate一对多实例

    【hibernate一对多实例详解】 在Java编程中,Hibernate是一个强大的对象关系映射(ORM)框架,它简化了数据库...这个“hibernate一对多实例”提供了一个基础的实践模型,为深入学习和应用Hibernate打下坚实的基础。

    Hibernate一对多映射

    一、Hibernate一对多映射基础 1. 概念理解: 在数据库中,一对多关系意味着一个实体(如用户)可以对应多个其他实体(如订单)。在Hibernate中,我们通过配置XML映射文件或使用注解来建立这种关系。 2. 关系表示...

    Hibernate-基础联表模板

    对于多对多关系,Hibernate通常会创建一个中间表来存储两个实体的关联。`@ManyToMany`注解用于定义这种关系,联表查询时,可能需要使用`JOIN FETCH`来一次性获取所有关联数据,以避免N+1问题。 8. **Fetch策略** ...

    汤阳光Hibernate3.6(基础).doc

    【标题】:“汤阳光Hibernate3.6(基础).doc”文档详细介绍了Hibernate 3.6,这是一份适合Hibernate初学者的学习资料,涵盖了丰富的实例代码、图表和注解。 【描述】:文档主要讨论了Java对象持久化,特别是如何在...

    hibernate3基础教程中文版及源码

    9. **一对多、多对一、一对一关联映射**:掌握不同类型的关联映射配置,如List、Set、Map等集合类型的映射,以及联合主键的处理。 10. **延迟加载与立即加载**:理解Hibernate的懒加载和Eager加载策略,以及如何在...

    hibernate学习资料大全

    Hibernate 支持各种关联映射,如一对一、一对多、多对一和多对多。理解这些关联关系的建立和查询,能够帮助开发者设计出更灵活的数据模型。 8. **缓存机制**: Hibernate 提供了第一级缓存和第二级缓存,以及查询...

    北大青鸟Hibernate学习资料

    本学习资料集合了多个关于Hibernate的重要主题,包括对象关系映射的基础、持久化机制、查询语言以及不同类型的关联关系,旨在帮助学习者深入理解并掌握Hibernate的核心概念和技术。 1. **对象状态及一对多关联** ...

    hibernate入门简单实例

    15. **实体关系映射策略**:包括一对一(OneToOne)、一对多(OneToMany)、多对一(ManyToOne)、多对多(ManyToMany)等,理解这些关系并正确配置是使用Hibernate的关键。 通过这个"hibernate_first"实例,你可以...

    hibernate基础教程.pdf

    **Hibernate 框架概述** Hibernate 是一个开源的对象关系映射(ORM)框架,它允许开发者用面向对象的方式来...理解并熟练掌握 Hibernate 的基本概念、配置、操作及优化策略,对于开发高效、稳定的 Java 应用至关重要。

    使用 Hibernate Shards 对数据进行切分

    Hibernate Shards是在Hibernate的基础上,通过数据切分策略实现的一种分布式数据库解决方案。它允许我们将一个大型数据库逻辑上分割成多个较小的数据库(称为“分片”),每个分片可以独立运行在不同的服务器上,...

Global site tag (gtag.js) - Google Analytics