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

相关文章

RedHat运维-Linux文本操作基础-AWK进阶

你不用整理,跟着敲一遍,有个印象,然后把它保存到本地,以后要用再去看,如果有了新东西,你自个再添加。这是我参考牛客上的shell编程专项题,只不过换成了问答的方式而已。不用背,就算是我自己亲自敲,我现在好多也记不住。 1. 输出nowcoder.txt文件第5行的内容 2. 输出nowcoder.txt文件第6行的内容 3. 输出nowcoder.txt文件第7行的内容 4. 输出nowcode

Vim使用基础篇

本文内容大部分来自 vimtutor,自带的教程的总结。在终端输入vimtutor 即可进入教程。 先总结一下,然后再分别介绍正常模式,插入模式,和可视模式三种模式下的命令。 目录 看完以后的汇总 1.正常模式(Normal模式) 1.移动光标 2.删除 3.【:】输入符 4.撤销 5.替换 6.重复命令【. ; ,】 7.复制粘贴 8.缩进 2.插入模式 INSERT

持久层 技术选型如何决策?JPA,Hibernate,ibatis(mybatis)

转自:http://t.51jdy.cn/thread-259-1-1.html 持久层 是一个项目 后台 最重要的部分。他直接 决定了 数据读写的性能,业务编写的复杂度,数据结构(对象结构)等问题。 因此 架构师在考虑 使用那个持久层框架的时候 要考虑清楚。 选择的 标准: 1,项目的场景。 2,团队的技能掌握情况。 3,开发周期(开发效率)。 传统的 业务系统,通常业

零基础STM32单片机编程入门(一)初识STM32单片机

文章目录 一.概要二.单片机型号命名规则三.STM32F103系统架构四.STM32F103C8T6单片机启动流程五.STM32F103C8T6单片机主要外设资源六.编程过程中芯片数据手册的作用1.单片机外设资源情况2.STM32单片机内部框图3.STM32单片机管脚图4.STM32单片机每个管脚可配功能5.单片机功耗数据6.FALSH编程时间,擦写次数7.I/O高低电平电压表格8.外设接口

ps基础入门

1.基础      1.1新建文件      1.2创建指定形状      1.4移动工具          1.41移动画布中的任意元素          1.42移动画布          1.43修改画布大小          1.44修改图像大小      1.5框选工具      1.6矩形工具      1.7图层          1.71图层颜色修改          1

回调的简单理解

之前一直不太明白回调的用法,现在简单的理解下 就按这张slidingmenu来说,主界面为Activity界面,而旁边的菜单为fragment界面。1.现在通过主界面的slidingmenu按钮来点开旁边的菜单功能并且选中”区县“选项(到这里就可以理解为A类调用B类里面的c方法)。2.通过触发“区县”的选项使得主界面跳转到“区县”相关的新闻列表界面中(到这里就可以理解为B类调用A类中的d方法

[FPGA][基础模块]跨时钟域传播脉冲信号

clk_a 周期为10ns clk_b 周期为34ns 代码: module pulse(input clk_a,input clk_b,input signal_a,output reg signal_b);reg [4:0] signal_a_widen_maker = 0;reg signal_a_widen;always @(posedge clk_a)if(signal_a)

00 - React 基础

1. React 基础 安装react指令 可参考: 官网官网使用教程 如: npx create-react-app 项目名如:npx create-react-app react-redux-pro JSX JSX 是一种 JavaScript 的语法扩展,类似于 XML 或 HTML,允许我们在 JavaScript 代码中编写 HTML。 const element =

如何理解redis是单线程的

写在文章开头 在面试时我们经常会问到这样一道题 你刚刚说redis是单线程的,那你能不能告诉我它是如何基于单个线程完成指令接收与连接接入的? 这时候我们经常会得到沉默,所以对于这道题,笔者会直接通过3.0.0源码分析的角度来剖析一下redis单线程的设计与实现。 Hi,我是 sharkChili ,是个不断在硬核技术上作死的 java coder ,是 CSDN的博客专家 ,也是开源

MySQL理解-下载-安装

MySQL理解: mysql:是一种关系型数据库管理系统。 下载: 进入官网MySQLhttps://www.mysql.com/  找到download 滑动到最下方:有一个开源社区版的链接地址: 然后就下载完成了 安装: 双击: 一直next 一直next这一步: 一直next到这里: 等待加载完成: 一直下一步到这里