Hibernate关系映射之多对多关系
来源:互联网 发布:php全栈 视频 编辑:程序博客网 时间:2024/05/17 01:19
多对多关联有双向和单向之分,区别在于在POJO类中是否有Set属性。本文是双向关联。
第一步:创建数据库,设置好中文属性,然后创建三个表。
Student表:
列名
描述
数据类型
可空
默认值
说明
ID
ID号
int
否
无
主键,自增
SNUMBER
学号
varchar(10)
是
无
SNAME
姓名
varchar(10)
是
无
SAGE
年龄
int
是
无
Course表:
列名
描述
数据类型
可空
默认值
说明
ID
ID号
int
否
无
主键,自增
CNUMBER
课程号
varchar(10)
是
无
CNAME
课程名
varchar(20)
是
无
stu_cour表:列名
描述
数据类型
可空
默认值
说明
SID
学生ID号
int
否
无
主键
CID
课程ID号
int
否
无
主键
第二步:创建数据库连接驱动,打开MyEclipse DataBase Explorer Perspective视图,new,其中Driver Template=MySQL Connector/J,Driver Name=自定义,Connection URL=jdbc:mysql://localhost:3306/javaee?characterEncoding=gbk,User name=用户名,Password=密码。
第三步:创建Web Project,添加Hibernate开发能力(MyEclipse --> Add Hibernate Capabilites),即建立hibernate.cfg.xml文件。
第四步:创建POJO类和其映射文件,可以在打开连接后,对Student、Course表使用反向工程(Hibernate Reverse Engineering)。或者编辑每个文件。
Student.java
package org.model;import java.util.HashSet;import java.util.Set;/** * Student entity. @author MyEclipse Persistence Tools */public class Student implements java.io.Serializable {// Fieldsprivate Integer id;private String snumber;private String sname;private Integer sage;private Set courses = new HashSet(); //在Student类中增加Course集合并实现get/set// Constructors/** default constructor */public Student() {}/** minimal constructor */public Student(String snumber) {this.snumber = snumber;}/** full constructor */public Student(String snumber, String sname, Integer sage) {this.snumber = snumber;this.sname = sname;this.sage = sage;}// Property accessorspublic Integer getId() {return this.id;}public void setId(Integer id) {this.id = id;}public String getSnumber() {return this.snumber;}public void setSnumber(String snumber) {this.snumber = snumber;}public String getSname() {return this.sname;}public void setSname(String sname) {this.sname = sname;}public Integer getSage() {return this.sage;}public void setSage(Integer sage) {this.sage = sage;}public Set getCourses() {return courses;}public void setCourses(Set courses) {this.courses = courses;}}Student.hbm.xml
<?xml version="1.0" encoding="utf-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><!-- Mapping file autogenerated by MyEclipse Persistence Tools--><hibernate-mapping> <class name="org.model.Student" table="student" catalog="lab6"> <id name="id" type="java.lang.Integer"> <column name="ID" /> <generator class="identity" /> </id> <property name="snumber" type="java.lang.String"> <column name="SNUMBER" length="10" not-null="true" /> </property> <property name="sname" type="java.lang.String"> <column name="SNAME" length="10" /> </property> <property name="sage" type="java.lang.Integer"> <column name="SAGE" /> </property> <set name="courses" table="stu_cour" cascade="all" lazy="true"> <key column="SID"></key> <many-to-many class="org.model.Course" column="CID" /> </set> </class></hibernate-mapping>Course.java
package org.model;import java.util.HashSet;import java.util.Set;/** * Course entity. @author MyEclipse Persistence Tools */public class Course implements java.io.Serializable {// Fieldsprivate Integer id;private String cnumber;private String cname;private Set stus = new HashSet(); //在Course类中增加Students集合并实现其get/set// Constructors/** default constructor */public Course() {}/** full constructor */public Course(String cnumber, String cname) {this.cnumber = cnumber;this.cname = cname;}// Property accessorspublic Integer getId() {return this.id;}public void setId(Integer id) {this.id = id;}public String getCnumber() {return this.cnumber;}public void setCnumber(String cnumber) {this.cnumber = cnumber;}public String getCname() {return this.cname;}public void setCname(String cname) {this.cname = cname;}public Set getStus() {return stus;}public void setStus(Set stus) {this.stus = stus;}}Course.hbm.xml
<?xml version="1.0" encoding="utf-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><!-- Mapping file autogenerated by MyEclipse Persistence Tools--><hibernate-mapping> <class name="org.model.Course" table="course" catalog="lab6"> <id name="id" type="java.lang.Integer"> <column name="ID" /> <generator class="identity" /> </id> <property name="cnumber" type="java.lang.String"> <column name="CNUMBER" length="10" /> </property> <property name="cname" type="java.lang.String"> <column name="CNAME" length="20" /> </property> <set name="stus" table="stu_cour" lazy="true" cascade="all"> <key column="CID"></key> <many-to-many class="org.model.Student" column="SID" /> </set> </class></hibernate-mapping>
注意:在hibernate.cfg.xml中查看一下是否将POJO类映射。
<mapping resource="org/model/Course.hbm.xml"/><mapping resource="org/model/Student.hbm.xml"/>
第五步:创建测试类
Test.java
package org;import java.util.HashSet;import java.util.Set;import org.hibernate.Session;import org.hibernate.Transaction;import org.model.Course;import org.model.Student;import org.util.HibernateSessionFactory;public class Test {public static void main(String args[]) {Session session=HibernateSessionFactory.getSession(); //创建Session对象Transaction ts=session.beginTransaction(); // 创建事务对象Course cour1=new Course();Course cour2=new Course();Course cour3=new Course();cour1.setCnumber("101");cour1.setCname("计算机基础");cour2.setCnumber("102");cour2.setCname("数据库原理");cour3.setCnumber("103");cour3.setCname("计算机原理");Set courses=new HashSet();courses.add(cour1);courses.add(cour2);courses.add(cour3);Student stu=new Student();stu.setSnumber("221154");stu.setSname("李四");stu.setSage(21);stu.setCourses(courses); //将Course集合set给Student对象session.save(stu); //Session保存ts.commit(); //事务提交HibernateSessionFactory.closeSession(); //关闭Session}}
- Hibernate关系映射之多对多关系
- hibernate关系映射之多对多
- hibernate映射关系之多对多
- 【Hibernate五】关系映射之多对多
- Hibernate映射关系之多对多关系映射
- Hibernate关联关系映射之多对多关联关系
- Hibernate之多对多关系之间的关系映射
- Hibernate表关系映射之多对多映射
- Hibernate关系配置之多对多映射配置
- hibernate关联关系之多对多关系
- Hibernate关系映射之多对多映射的两种方式
- 技术分析之Hibernate的关联关系映射之多对多映射
- Hibernate关联关系之多对多
- hibernate之多对多关系设置
- Hibernate对象关系映射-- 多对多关联关系映射
- Hibernate对象关系映射详解之一对多关系映射
- Hibernate的关系映射多对多
- hibernate之映射关系多对多
- 缓存
- 用C++做微信公众平台开发的后台开发时,用sha1加密验证的方法
- python类中函数调用要加self
- ruby send mail
- poj 1562
- Hibernate关系映射之多对多关系
- HTML5移动开发(6)——Canvas图形绘制基础
- python 实现cowsay的一个小玩意
- CodeMirror编辑器中的嵌套textarea标签
- 【硬件】墨水屏显示改造方案
- shell常用的基本命令
- 80211速率控制的研究
- Associated Objects
- JLink v8克隆版破解向导(此方法仅适用XP32位版 WIN7及以上和64位均不支持 建议使用虚拟机)