`
lmbb1945
  • 浏览: 12561 次
  • 性别: Icon_minigender_1
  • 来自: 南京
最近访客 更多访客>>
社区版块
存档分类
最新评论

hibernate多对多例子

    博客分类:
  • JPA
阅读更多
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如何实现多对多关联映射,并通过实际例子解析相关配置和操作。 一、多对多关联概述 在数据库设计中,多对多关联表示两个表之间的关系,如学生和课程的关系,一个学生可以选修多门课程,而...

    hibernate多对多映射的例子

    本例子主要关注的是Hibernate中的多对多映射,这是一个复杂但常见的关系类型,适用于表示两个实体之间没有主次之分的关系。 在数据库设计中,多对多关系意味着一个表的记录可以对应另一个表中的多个记录,反之亦然...

    Hibernate 一对一,一对多,多对多例子

    “Hibernate例子”表明这是一个关于如何使用Hibernate进行数据库操作的实际代码示例集合。 **文件名称解析:** - Hibernate_1to1:这个文件可能包含了关于一对一关联关系的示例代码。在Hibernate中,一对一关联通常...

    hibernate 多对多源代码

    在Java的持久化框架Hibernate中,多对多(Many-to-Many)关系是数据库中常见的关联类型,它允许一个实体实例对应多个其他实体实例,反之亦然。本篇将深入探讨Hibernate如何处理这种复杂的数据关联。 一、多对多关系...

    hibernate的第一个例子

    **标题解析:**“hibernate的第一个例子”表明这是一个关于Hibernate框架的基础教程,主要目标是展示如何使用Hibernate进行数据持久化操作。 **描述分析:**描述提到这是一个超级简单的例子,包含一个持久化对象...

    hibernate多对多的简单实现

    在Java的持久化框架Hibernate中,多对多(Many-to-Many)关系是数据库中常见的关联类型,它允许一个实体实例对应多个其他实体实例,反之亦然。在本项目"hibernate多对多的简单实现"中,我们看到的是学生(Student)...

    hibernate例子(多对一)

    标题"hibernate例子(多对一)"表明我们将探讨的是一个关于Hibernate框架的实例,特别关注的是“多对一”的关系映射。在数据库设计中,“多对一”关系指的是一个实体(如表)的多个记录可以与另一个实体的一个记录相...

    Hibernate多对多关联添加及查询示例

    本示例主要关注的是Hibernate中的多对多关联映射及其添加与查询方法。 多对多关联是数据库设计中的一种常见关系类型,指的是两个实体之间可以存在多个对应关系。例如,在学生与课程的关系中,一个学生可以选修多门...

    Hibernate关于注解的一对多,多对多,一对一

    多对多关系常见于用户角色的例子,一个用户可以有多个角色,一个角色也可以被多个用户拥有。在Hibernate中,我们使用`@ManyToMany`注解来处理。 1. **@ManyToMany** 注解:在两个实体类中都需要使用此注解,分别...

    Hibernate1对多1对1多对多关联映射例子源码含xml配置

    在hibernate中,通常配置对象关系映射关系有两种,一种是基于xml的方式,另一种是基于annotation的注解方式,熟话说,萝卜青菜,可有所爱,每个人都有自己喜欢的配置方式,这个是xml配置的例子

    hibernate一对多项目

    本项目“hibernate一对多项目”旨在演示如何在JavaWeb应用中使用Hibernate处理一对多的关系映射。这里我们将深入探讨 Hibernate 的一对多关系、配置以及在实际项目中的应用。 首先,一对多关系在数据库中很常见,...

    Hibernate 经典例子全

    **标题:Hibernate经典例子全** **内容:** Hibernate是一款强大的Java持久化框架,它简化了数据库操作,使得开发者可以更加专注于业务逻辑而无需过多关注底层的SQL语句。本资源包含了一系列的Hibernate实例,旨在...

    Hibernate 的第一个例子

    在本文中,我们将深入探讨如何创建Hibernate的第一个例子,帮助初学者快速入门。** **一、Hibernate 简介** Hibernate 提供了丰富的API,简化了Java应用程序与关系数据库之间的交互。它通过XML配置文件或注解来定义...

    hibernate多对多关联映射(单项关联)

    在这个例子中,`@ManyToMany`注解定义了多对多的关系,`cascade`属性指定了操作的级联行为,比如添加或删除学生时,相关的课程也会自动更新。`@JoinTable`定义了中间表的名称以及连接学生的`student_id`和课程的`...

    Hibernate实践例子程序

    Hibernate 是一个开源的O/R mappimg的框架,基于JDBC提供了一种持久性数据管理的方案,相对于EntityBean来说是相当轻量级的。由于Hibernate是基于 JDBC的,所以它的数据库查寻的能力相对于CMP来说也是异常强大的,...

    hibernate一对多例子

    ### Hibernate一对多关系详解 #### 一、理解一对多关系 在数据库设计中,一对多(One-to-Many)是一种常见的关联方式,指的是一个表中的记录可以与另一个表中的多个记录建立联系。例如,在学生与书籍的关系中,一...

    一个很简单的hibernate例子

    在Java开发领域,Hibernate是一个...随着对Hibernate的深入学习,还可以掌握更复杂的功能,如级联操作、懒加载、缓存机制以及实体关系映射等。理解并熟练运用Hibernate,可以极大地提高Java应用的开发效率和可维护性。

    hibernate双向多对多关联映射(注解版)

    在这个“hibernate双向多对多关联映射(注解版)”的主题中,我们将深入探讨如何使用Hibernate的注解配置来处理数据库中的双向多对多关联关系。 首先,多对多关联在数据库设计中是指两个实体之间存在多个对应关系,...

    hibernate一对多与多对一

    本篇文章将详细讲解"hibernate一对多与多对一"的关系映射概念,以及如何在实际开发中进行配置和使用。 首先,我们来看一下“一对多”关系。在现实世界中,这种关系可以对应到例如一个班级有多个学生,或者一个人...

    hibernate登录小例子

    【hibernate登录小例子】是一个面向初学者的教程,主要展示了如何利用Hibernate框架实现一个简单的用户登录功能。在这个例子中,我们将深入探讨Hibernate的基本概念、配置、实体类的创建、映射文件的编写以及Session...

Global site tag (gtag.js) - Google Analytics