hibernate多对多的基础理解

2024-06-18 06:38
文章标签 基础 理解 hibernate

本文主要是介绍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-mappingPUBLIC "-//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-mappingPUBLIC "-//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多对多的基础理解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1071570

相关文章

深入理解Go语言中二维切片的使用

《深入理解Go语言中二维切片的使用》本文深入讲解了Go语言中二维切片的概念与应用,用于表示矩阵、表格等二维数据结构,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录引言二维切片的基本概念定义创建二维切片二维切片的操作访问元素修改元素遍历二维切片二维切片的动态调整追加行动态

从原理到实战深入理解Java 断言assert

《从原理到实战深入理解Java断言assert》本文深入解析Java断言机制,涵盖语法、工作原理、启用方式及与异常的区别,推荐用于开发阶段的条件检查与状态验证,并强调生产环境应使用参数验证工具类替代... 目录深入理解 Java 断言(assert):从原理到实战引言:为什么需要断言?一、断言基础1.1 语

从基础到进阶详解Pandas时间数据处理指南

《从基础到进阶详解Pandas时间数据处理指南》Pandas构建了完整的时间数据处理生态,核心由四个基础类构成,Timestamp,DatetimeIndex,Period和Timedelta,下面我... 目录1. 时间数据类型与基础操作1.1 核心时间对象体系1.2 时间数据生成技巧2. 时间索引与数据

安装centos8设置基础软件仓库时出错的解决方案

《安装centos8设置基础软件仓库时出错的解决方案》:本文主要介绍安装centos8设置基础软件仓库时出错的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录安装Centos8设置基础软件仓库时出错版本 8版本 8.2.200android4版本 javas

Linux基础命令@grep、wc、管道符的使用详解

《Linux基础命令@grep、wc、管道符的使用详解》:本文主要介绍Linux基础命令@grep、wc、管道符的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录grep概念语法作用演示一演示二演示三,带选项 -nwc概念语法作用wc,不带选项-c,统计字节数-

python操作redis基础

《python操作redis基础》Redis(RemoteDictionaryServer)是一个开源的、基于内存的键值对(Key-Value)存储系统,它通常用作数据库、缓存和消息代理,这篇文章... 目录1. Redis 简介2. 前提条件3. 安装 python Redis 客户端库4. 连接到 Re

SpringBoot基础框架详解

《SpringBoot基础框架详解》SpringBoot开发目的是为了简化Spring应用的创建、运行、调试和部署等,使用SpringBoot可以不用或者只需要很少的Spring配置就可以让企业项目快... 目录SpringBoot基础 – 框架介绍1.SpringBoot介绍1.1 概述1.2 核心功能2

Spring Boot集成SLF4j从基础到高级实践(最新推荐)

《SpringBoot集成SLF4j从基础到高级实践(最新推荐)》SLF4j(SimpleLoggingFacadeforJava)是一个日志门面(Facade),不是具体的日志实现,这篇文章主要介... 目录一、日志框架概述与SLF4j简介1.1 为什么需要日志框架1.2 主流日志框架对比1.3 SLF4

Spring Boot集成Logback终极指南之从基础到高级配置实战指南

《SpringBoot集成Logback终极指南之从基础到高级配置实战指南》Logback是一个可靠、通用且快速的Java日志框架,作为Log4j的继承者,由Log4j创始人设计,:本文主要介绍... 目录一、Logback简介与Spring Boot集成基础1.1 Logback是什么?1.2 Sprin

MySQL复合查询从基础到多表关联与高级技巧全解析

《MySQL复合查询从基础到多表关联与高级技巧全解析》本文主要讲解了在MySQL中的复合查询,下面是关于本文章所需要数据的建表语句,感兴趣的朋友跟随小编一起看看吧... 目录前言:1.基本查询回顾:1.1.查询工资高于500或岗位为MANAGER的雇员,同时还要满足他们的姓名首字母为大写的J1.2.按照部门