转载自: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(); } }
相关推荐
在关系型数据库设计中,多对一和一对多是两种非常基础且重要的关联关系类型。多对一指的是多个实体(如订单)与一个实体(如客户)之间的关联,而一对多则是指一个实体(如客户)可以拥有多个相关联的实体(如订单)...
1. **Hibernate基础**:Hibernate是一个开源的ORM框架,它允许开发者通过Java对象来操作数据库,减少了手动编写SQL的繁琐工作。 2. **一对多关系**:在数据库设计中,一对多关系表示一个表中的记录可以与另一个表中...
【Hibernate 基础】是Java开发中一个重要的部分,主要关注如何将对象模型与关系数据库进行映射,以简化...对于初学者来说,深入理解Hibernate的基础知识,熟练掌握其配置和使用方法,是提升Java开发技能的关键一步。
Hibernate支持一对一、一对多、多对一和多对多关系映射,如List、Set、Map等集合类型,通过配置XML映射文件来实现复杂的数据结构。 10. **延迟加载与立即加载** 延迟加载(Lazy Loading)是Hibernate的一个重要...
一、Hibernate多对多映射基础 多对多映射在数据库中表现为两个表通过一个中间表(或称为连接表)相互关联。例如,学生和课程的关系,一个学生可以选修多门课程,而一门课程也可以被多个学生选修。在Hibernate中,...
Hibernate 是一个开源的对象关系...以上内容涵盖了Hibernate基础技术的核心要点,通过学习和实践,开发者能够熟练地利用Hibernate进行数据库操作,提升开发效率。记得每个概念都要配合实例进行练习,以加深理解和掌握。
本资源“Hibernate基础学习源码”提供了五个不同阶段的学习示例,分别命名为Hibernate_01至Hibernate_04以及Hibernate_M2M,涵盖了Hibernate的基本概念、配置、实体映射、CRUD操作以及多对多关系的处理。 1. **...
在本"Hibernate基础包"中,包含了用于SSH开发所需的全部核心库,使得开发者能够快速搭建项目并进行数据库交互。 首先,Hibernate的核心功能在于它的ORM(对象关系映射)机制。ORM允许开发者通过Java对象来操作...
Hibernate是一款强大的Java持久化框架,它为Java开发者提供了一种对象关系映射工具来管理Java应用中的关系数据。...如果你的项目需要与关系型数据库打交道,那么理解和掌握Hibernate的使用将会非常有益。
【hibernate一对多实例详解】 在Java编程中,Hibernate是一个强大的对象关系映射(ORM)框架,它简化了数据库...这个“hibernate一对多实例”提供了一个基础的实践模型,为深入学习和应用Hibernate打下坚实的基础。
一、Hibernate一对多映射基础 1. 概念理解: 在数据库中,一对多关系意味着一个实体(如用户)可以对应多个其他实体(如订单)。在Hibernate中,我们通过配置XML映射文件或使用注解来建立这种关系。 2. 关系表示...
对于多对多关系,Hibernate通常会创建一个中间表来存储两个实体的关联。`@ManyToMany`注解用于定义这种关系,联表查询时,可能需要使用`JOIN FETCH`来一次性获取所有关联数据,以避免N+1问题。 8. **Fetch策略** ...
9. **一对多、多对一、一对一关联映射**:掌握不同类型的关联映射配置,如List、Set、Map等集合类型的映射,以及联合主键的处理。 10. **延迟加载与立即加载**:理解Hibernate的懒加载和Eager加载策略,以及如何在...
Hibernate 支持各种关联映射,如一对一、一对多、多对一和多对多。理解这些关联关系的建立和查询,能够帮助开发者设计出更灵活的数据模型。 8. **缓存机制**: Hibernate 提供了第一级缓存和第二级缓存,以及查询...
本学习资料集合了多个关于Hibernate的重要主题,包括对象关系映射的基础、持久化机制、查询语言以及不同类型的关联关系,旨在帮助学习者深入理解并掌握Hibernate的核心概念和技术。 1. **对象状态及一对多关联** ...
15. **实体关系映射策略**:包括一对一(OneToOne)、一对多(OneToMany)、多对一(ManyToOne)、多对多(ManyToMany)等,理解这些关系并正确配置是使用Hibernate的关键。 通过这个"hibernate_first"实例,你可以...
**Hibernate 框架概述** Hibernate 是一个开源的对象关系映射(ORM)框架,它允许开发者用面向对象的方式来...理解并熟练掌握 Hibernate 的基本概念、配置、操作及优化策略,对于开发高效、稳定的 Java 应用至关重要。
Hibernate Shards是在Hibernate的基础上,通过数据切分策略实现的一种分布式数据库解决方案。它允许我们将一个大型数据库逻辑上分割成多个较小的数据库(称为“分片”),每个分片可以独立运行在不同的服务器上,...