hibernate系列十:多对多关联配置及案例(二)
2017-11-30 00:09
295 查看
接上一篇,还是以学生---课程为例。
一 把多对多拆分成两个多对一,组合主键的方式
================sql脚本==========================
CREATE TABLE student
(
stuId INT PRIMARY KEY AUTO_INCREMENT,
stuName VARCHAR(20) NOT NULL,
gender VARCHAR(2),
age SMALLINT,
address VARCHAR(200) DEFAULT '学生宿舍'
)AUTO_INCREMENT=100
;
INSERT INTO Student(stuName,gender,age,address) VALUES ('王燕','女',18,DEFAULT);
INSERT INTO Student(stuName,gender,age,address) VALUES ('张栋','男',21,DEFAULT);
INSERT INTO Student(stuName,gender,age,address) VALUES ('李波','男',21,DEFAULT);
INSERT INTO Student(stuName,gender,age,address) VALUES ('陈建','男',19,DEFAULT);
INSERT INTO Student(stuName,gender,age,address) VALUES ('王江洪','男',25,DEFAULT);
INSERT INTO Student(stuName,gender,age,address) VALUES ('潘将','男',24,DEFAULT);
INSERT INTO Student(stuName,gender,age,address) VALUES ('张斌','男',22,DEFAULT);
INSERT INTO Student(stuName,gender,age,address) VALUES ('张斌','女',20,DEFAULT);
--
INSERT INTO Student(stuName,gender,age,address) VALUES ('刘大海','男',28,DEFAULT);
INSERT INTO Student(stuName,gender,age,address) VALUES ('刘德华','男',31,DEFAULT);
INSERT INTO Student(stuName,gender,age,address) VALUES ('周润发','男',41,DEFAULT);
INSERT INTO Student(stuName,gender,age,address) VALUES ('张学友','男',37,DEFAULT);
INSERT INTO Student(stuName,gender,age,address) VALUES ('周星驰','男',42,DEFAULT);
INSERT INTO Student(stuName,gender,age,address) VALUES ('刘亦菲','女',24,DEFAULT);
CREATE TABLE Course
(
courseId INT PRIMARY KEY ,
courseName VARCHAR(20) NOT NULL,
hours DECIMAL(3,1)
);
INSERT INTO course VALUES(10,'数据库基础',20.5);
INSERT INTO course VALUES(11,'c#语言入门',21.5);
INSERT INTO course VALUES(12,'div+css布局',15);
INSERT INTO course VALUES(13,'java面向对象编程',30);
INSERT INTO course VALUES(14,'java程序逻辑',33);
INSERT INTO course VALUES(15,'struts框架开发',20.5);
INSERT INTO course VALUES(16,'oracle数据库开发',22);
--组合主键的形式
CREATE TABLE study
(
stuId INT,
courseId INT,
result INT,
PRIMARY KEY (stuId,courseId)
)
;
INSERT INTO study VALUES(100,11,80);
INSERT INTO study VALUES(100,12,83);
INSERT INTO study VALUES(100,13,56);
INSERT INTO study VALUES(100,14,40);
INSERT INTO study VALUES(101,11,80);
INSERT INTO study VALUES(101,13,70);
INSERT INTO study VALUES(102,12,93);
INSERT INTO study VALUES(103,11,85);
INSERT INTO study VALUES(104,11,89);
INSERT INTO study VALUES(105,12,66);
INSERT INTO study VALUES(105,13,77);
INSERT INTO study VALUES(106,11,45);
INSERT INTO study VALUES(106,14,85);
==================实体类Study.java=========================
package com.obtk.test;
/**
* Study entity. @author MyEclipse Persistence Tools
*/
public class Study implements java.io.Serializable {
private static final long serialVersionUID = 8534796144104395514L;
private Integer stuId;
private Integer courseId;
private Integer result;
private Course course; //关联属性
private Student student; //关联属性
public Study() {
}
public Study(Integer stuId,Integer courseId) {
this.courseId=courseId;
this.stuId=stuId;
}
public Integer getResult() {
return this.result;
}
public Integer getStuId() {
return stuId;
}
public void setStuId(Integer stuId) {
this.stuId = stuId;
}
public Integer getCourseId() {
return courseId;
}
public void setCourseId(Integer courseId) {
this.courseId = courseId;
}
public void setResult(Integer result) {
this.result = result;
}
public Course getCourse() {
return course;
}
public void setCourse(Course course) {
this.course = course;
}
public Student getStudent() {
return student;
}
public void setStudent(Student student) {
this.student = student;
}
}================映射文件Study.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="com.obtk.entitys.Study" table="study" catalog="manydb">
<!-- 组合主键的策略 -->
<composite-id>
<key-many-to-one name="course" class="com.obtk.entitys.Course" column="courseId"></key-many-to-one>
<key-many-to-one name="student" class="com.obtk.entitys.Student" column="stuId"></key-many-to-one>
</composite-id>
<property name="result" type="java.lang.Integer">
<column name="result" />
</property>
</class>
</hibernate-mapping>
====================测试类=======================
案例一 数据添加
package com.obtk.test;
import java.util.List;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.obtk.entitys.Course;
import com.obtk.entitys.Student;
import com.obtk.entitys.Study;
import com.obtk.utils.HibernateUtil;
public class TestAdd {
public static void main(String[] args) {
Session session=null;
Transaction tx=null;
try {
session=HibernateUtil.getSession();
tx=session.beginTransaction();
Student stu=(Student)session.createQuery("from Student where stuName='王燕'").uniqueResult();
Course cor=(Course)session.createQuery("from Course where courseName='数据库基础'").uniqueResult();
Study study=new Study();
study.setCourse(cor);
study.setResult(99);
study.setStudent(stu);
session.save(study);
tx.commit();
} catch (HibernateException e) {
e.printStackTrace();
tx.rollback();
}finally{
if(session!=null){
session.close();
}
}
}
}
案例二 数据查询
package com.obtk.test;
import java.util.List;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import com.obtk.entitys.Study;
import com.obtk.utils.HibernateUtil;
public class TestQuery2 {
public static void main(String[] args) {
Session session=null;
try {
session=HibernateUtil.getSession();
Study study=(Study)session.load(Study.class, 10);
System.out.println(study.getCourse().getCourseName()+","+study.getStudent().getStuName()
+","+study.getResult());
} catch (HibernateException e) {
e.printStackTrace();
}finally{
if(session!=null){
session.close();
}
}
}
}
案例三 数据查询
package com.obtk.test;
import java.util.List;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import com.obtk.entitys.Study;
import com.obtk.utils.HibernateUtil;
public class TestQuery3 {
public static void main(String[] args) {
Session session=null;
try {
session=HibernateUtil.getSession();
//组合主键的get,load查询方式
Study param=new Study(100,13);
Study study=(Study)session.load(Study.class, param);
System.out.println(study.getCourse().getCourseName()+","+study.getStudent().getStuName()
+","+study.getResult());
} catch (HibernateException e) {
e.printStackTrace();
}finally{
if(session!=null){
session.close();
}
}
}
}
二 把多对多拆分成两个多对一,独立主键的方式
================sql脚本==========================
package com.obtk.entitys;
/**
* Study entity. @author MyEclipse Persistence Tools
*/
public class Study implements java.io.Serializable {
private static final long serialVersionUID = 8534796144104395514L;
private Integer resultId;
private Integer result;
private Course course; //关联属性
private Student student; //关联属性
public Study() {
}
public void setResult(Integer result) {
this.result = result;
}
public Integer getResult() {
return result;
}
public Course getCourse() {
return course;
}
public void setCourse(Course course) {
this.course = course;
}
public Student getStudent() {
return student;
}
public void setStudent(Student student) {
this.student = student;
}
public void setResultId(Integer resultId) {
this.resultId = resultId;
}
public Integer getResultId() {
return resultId;
}
}====================映射文件study.hbm.xml=====================
package com.obtk.test;
import java.util.List;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import com.obtk.entitys.Study;
import com.obtk.utils.HibernateUtil;
public class TestQuery2 {
public static void main(String[] args) {
Session session=null;
try {
session=HibernateUtil.getSession();
Study study=(Study)session.load(Study.class, 10);
System.out.println(study.getCourse().getCourseName()+","+study.getStudent().getStuName()
+","+study.getResult());
} catch (HibernateException e) {
e.printStackTrace();
}finally{
if(session!=null){
session.close();
}
}
}
}
一 把多对多拆分成两个多对一,组合主键的方式
================sql脚本==========================
CREATE TABLE student
(
stuId INT PRIMARY KEY AUTO_INCREMENT,
stuName VARCHAR(20) NOT NULL,
gender VARCHAR(2),
age SMALLINT,
address VARCHAR(200) DEFAULT '学生宿舍'
)AUTO_INCREMENT=100
;
INSERT INTO Student(stuName,gender,age,address) VALUES ('王燕','女',18,DEFAULT);
INSERT INTO Student(stuName,gender,age,address) VALUES ('张栋','男',21,DEFAULT);
INSERT INTO Student(stuName,gender,age,address) VALUES ('李波','男',21,DEFAULT);
INSERT INTO Student(stuName,gender,age,address) VALUES ('陈建','男',19,DEFAULT);
INSERT INTO Student(stuName,gender,age,address) VALUES ('王江洪','男',25,DEFAULT);
INSERT INTO Student(stuName,gender,age,address) VALUES ('潘将','男',24,DEFAULT);
INSERT INTO Student(stuName,gender,age,address) VALUES ('张斌','男',22,DEFAULT);
INSERT INTO Student(stuName,gender,age,address) VALUES ('张斌','女',20,DEFAULT);
--
INSERT INTO Student(stuName,gender,age,address) VALUES ('刘大海','男',28,DEFAULT);
INSERT INTO Student(stuName,gender,age,address) VALUES ('刘德华','男',31,DEFAULT);
INSERT INTO Student(stuName,gender,age,address) VALUES ('周润发','男',41,DEFAULT);
INSERT INTO Student(stuName,gender,age,address) VALUES ('张学友','男',37,DEFAULT);
INSERT INTO Student(stuName,gender,age,address) VALUES ('周星驰','男',42,DEFAULT);
INSERT INTO Student(stuName,gender,age,address) VALUES ('刘亦菲','女',24,DEFAULT);
CREATE TABLE Course
(
courseId INT PRIMARY KEY ,
courseName VARCHAR(20) NOT NULL,
hours DECIMAL(3,1)
);
INSERT INTO course VALUES(10,'数据库基础',20.5);
INSERT INTO course VALUES(11,'c#语言入门',21.5);
INSERT INTO course VALUES(12,'div+css布局',15);
INSERT INTO course VALUES(13,'java面向对象编程',30);
INSERT INTO course VALUES(14,'java程序逻辑',33);
INSERT INTO course VALUES(15,'struts框架开发',20.5);
INSERT INTO course VALUES(16,'oracle数据库开发',22);
--组合主键的形式
CREATE TABLE study
(
stuId INT,
courseId INT,
result INT,
PRIMARY KEY (stuId,courseId)
)
;
INSERT INTO study VALUES(100,11,80);
INSERT INTO study VALUES(100,12,83);
INSERT INTO study VALUES(100,13,56);
INSERT INTO study VALUES(100,14,40);
INSERT INTO study VALUES(101,11,80);
INSERT INTO study VALUES(101,13,70);
INSERT INTO study VALUES(102,12,93);
INSERT INTO study VALUES(103,11,85);
INSERT INTO study VALUES(104,11,89);
INSERT INTO study VALUES(105,12,66);
INSERT INTO study VALUES(105,13,77);
INSERT INTO study VALUES(106,11,45);
INSERT INTO study VALUES(106,14,85);
==================实体类Study.java=========================
package com.obtk.test;
/**
* Study entity. @author MyEclipse Persistence Tools
*/
public class Study implements java.io.Serializable {
private static final long serialVersionUID = 8534796144104395514L;
private Integer stuId;
private Integer courseId;
private Integer result;
private Course course; //关联属性
private Student student; //关联属性
public Study() {
}
public Study(Integer stuId,Integer courseId) {
this.courseId=courseId;
this.stuId=stuId;
}
public Integer getResult() {
return this.result;
}
public Integer getStuId() {
return stuId;
}
public void setStuId(Integer stuId) {
this.stuId = stuId;
}
public Integer getCourseId() {
return courseId;
}
public void setCourseId(Integer courseId) {
this.courseId = courseId;
}
public void setResult(Integer result) {
this.result = result;
}
public Course getCourse() {
return course;
}
public void setCourse(Course course) {
this.course = course;
}
public Student getStudent() {
return student;
}
public void setStudent(Student student) {
this.student = student;
}
}================映射文件Study.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="com.obtk.entitys.Study" table="study" catalog="manydb">
<!-- 组合主键的策略 -->
<composite-id>
<key-many-to-one name="course" class="com.obtk.entitys.Course" column="courseId"></key-many-to-one>
<key-many-to-one name="student" class="com.obtk.entitys.Student" column="stuId"></key-many-to-one>
</composite-id>
<property name="result" type="java.lang.Integer">
<column name="result" />
</property>
</class>
</hibernate-mapping>
====================测试类=======================
案例一 数据添加
package com.obtk.test;
import java.util.List;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.obtk.entitys.Course;
import com.obtk.entitys.Student;
import com.obtk.entitys.Study;
import com.obtk.utils.HibernateUtil;
public class TestAdd {
public static void main(String[] args) {
Session session=null;
Transaction tx=null;
try {
session=HibernateUtil.getSession();
tx=session.beginTransaction();
Student stu=(Student)session.createQuery("from Student where stuName='王燕'").uniqueResult();
Course cor=(Course)session.createQuery("from Course where courseName='数据库基础'").uniqueResult();
Study study=new Study();
study.setCourse(cor);
study.setResult(99);
study.setStudent(stu);
session.save(study);
tx.commit();
} catch (HibernateException e) {
e.printStackTrace();
tx.rollback();
}finally{
if(session!=null){
session.close();
}
}
}
}
案例二 数据查询
package com.obtk.test;
import java.util.List;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import com.obtk.entitys.Study;
import com.obtk.utils.HibernateUtil;
public class TestQuery2 {
public static void main(String[] args) {
Session session=null;
try {
session=HibernateUtil.getSession();
Study study=(Study)session.load(Study.class, 10);
System.out.println(study.getCourse().getCourseName()+","+study.getStudent().getStuName()
+","+study.getResult());
} catch (HibernateException e) {
e.printStackTrace();
}finally{
if(session!=null){
session.close();
}
}
}
}
案例三 数据查询
package com.obtk.test;
import java.util.List;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import com.obtk.entitys.Study;
import com.obtk.utils.HibernateUtil;
public class TestQuery3 {
public static void main(String[] args) {
Session session=null;
try {
session=HibernateUtil.getSession();
//组合主键的get,load查询方式
Study param=new Study(100,13);
Study study=(Study)session.load(Study.class, param);
System.out.println(study.getCourse().getCourseName()+","+study.getStudent().getStuName()
+","+study.getResult());
} catch (HibernateException e) {
e.printStackTrace();
}finally{
if(session!=null){
session.close();
}
}
}
}
二 把多对多拆分成两个多对一,独立主键的方式
================sql脚本==========================
CREATE TABLE student ( stuId INT PRIMARY KEY AUTO_INCREMENT, stuName VARCHAR(20) NOT NULL, gender VARCHAR(2), age SMALLINT, address VARCHAR(200) DEFAULT '学生宿舍' )AUTO_INCREMENT=100 ; INSERT INTO Student(stuName,gender,age,address) VALUES ('王燕','女',18,DEFAULT); INSERT INTO Student(stuName,gender,age,address) VALUES ('张栋','男',21,DEFAULT); INSERT INTO Student(stuName,gender,age,address) VALUES ('李波','男',21,DEFAULT); INSERT INTO Student(stuName,gender,age,address) VALUES ('陈建','男',19,DEFAULT); INSERT INTO Student(stuName,gender,age,address) VALUES ('王江洪','男',25,DEFAULT); INSERT INTO Student(stuName,gender,age,address) VALUES ('潘将','男',24,DEFAULT); INSERT INTO Student(stuName,gender,age,address) VALUES ('张斌','男',22,DEFAULT); INSERT INTO Student(stuName,gender,age,address) VALUES ('张斌','女',20,DEFAULT); -- INSERT INTO Student(stuName,gender,age,address) VALUES ('刘大海','男',28,DEFAULT); INSERT INTO Student(stuName,gender,age,address) VALUES ('刘德华','男',31,DEFAULT); INSERT INTO Student(stuName,gender,age,address) VALUES ('周润发','男',41,DEFAULT); INSERT INTO Student(stuName,gender,age,address) VALUES ('张学友','男',37,DEFAULT); INSERT INTO Student(stuName,gender,age,address) VALUES ('周星驰','男',42,DEFAULT); INSERT INTO Student(stuName,gender,age,address) VALUES ('刘亦菲','女',24,DEFAULT); CREATE TABLE Course ( courseId INT PRIMARY KEY , courseName VARCHAR(20) NOT NULL, hours DECIMAL(3,1) ); INSERT INTO course VALUES(10,'数据库基础',20.5); INSERT INTO course VALUES(11,'c#语言入门',21.5); INSERT INTO course VALUES(12,'div+css布局',15); INSERT INTO course VALUES(13,'java面向对象编程',30); INSERT INTO course VALUES(14,'java程序逻辑',33); INSERT INTO course VALUES(15,'struts框架开发',20.5); INSERT INTO course VALUES(16,'oracle数据库开发',22); --独立主键的形式 CREATE TABLE study ( resultId INT PRIMARY KEY AUTO_INCREMENT, stuId INT, courseId INT, result INT, FOREIGN KEY(stuId) REFERENCES student(stuId), FOREIGN KEY(courseId) REFERENCES course(courseId) ) ; INSERT INTO study(stuId,courseId,result) VALUES(100,11,80); INSERT INTO study(stuId,courseId,result) VALUES(100,12,83); INSERT INTO study(stuId,courseId,result) VALUES(100,13,56); INSERT INTO study(stuId,courseId,result) VALUES(100,14,40); INSERT INTO study(stuId,courseId,result) VALUES(101,11,80); INSERT INTO study(stuId,courseId,result) VALUES(101,13,70); INSERT INTO study(stuId,courseId,result) VALUES(102,12,93); INSERT INTO study(stuId,courseId,result) VALUES(103,11,85); INSERT INTO study(stuId,courseId,result) VALUES(104,11,89); INSERT INTO study(stuId,courseId,result) VALUES(105,12,66); INSERT INTO study(stuId,courseId,result) VALUES(105,13,77); INSERT INTO study(stuId,courseId,result) VALUES(106,11,45); INSERT INTO study(stuId,courseId,result) VALUES(106,14,85);========================实体类Study.java======================
package com.obtk.entitys;
/**
* Study entity. @author MyEclipse Persistence Tools
*/
public class Study implements java.io.Serializable {
private static final long serialVersionUID = 8534796144104395514L;
private Integer resultId;
private Integer result;
private Course course; //关联属性
private Student student; //关联属性
public Study() {
}
public void setResult(Integer result) {
this.result = result;
}
public Integer getResult() {
return result;
}
public Course getCourse() {
return course;
}
public void setCourse(Course course) {
this.course = course;
}
public Student getStudent() {
return student;
}
public void setStudent(Student student) {
this.student = student;
}
public void setResultId(Integer resultId) {
this.resultId = resultId;
}
public Integer getResultId() {
return resultId;
}
}====================映射文件study.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="com.obtk.entitys.Study" table="study" catalog="manydb"> <id name="resultId" type="integer"> <column name="resultId"></column> <generator class="increment"></generator> </id> <property name="result" type="java.lang.Integer"> <column name="result" /> </property> <!-- 独立主键的策略 --> <many-to-one name="course" class="com.obtk.entitys.Course" column="courseId"></many-to-one> <many-to-one name="student" class="com.obtk.entitys.Student" column="stuId"></many-to-one> </class> </hibernate-mapping>案例:数据查询
package com.obtk.test;
import java.util.List;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import com.obtk.entitys.Study;
import com.obtk.utils.HibernateUtil;
public class TestQuery2 {
public static void main(String[] args) {
Session session=null;
try {
session=HibernateUtil.getSession();
Study study=(Study)session.load(Study.class, 10);
System.out.println(study.getCourse().getCourseName()+","+study.getStudent().getStuName()
+","+study.getResult());
} catch (HibernateException e) {
e.printStackTrace();
}finally{
if(session!=null){
session.close();
}
}
}
}
相关文章推荐
- hibernate系列七:多对一关联配置及案例
- hibernate系列十一:一对一关联配置及案例
- hibernate系列九:多对多关联配置及案例(一)
- hibernate系列八:一对多关联配置及案例
- hibernate多表关联配置
- Entity Framework 6 Code First 实践系列(1):实体类配置-根据依赖配置关系和关联
- MySQL 系列(一) 生产标准线上环境安装配置案例及棘手问题解决
- hibernate关联配置关系(一对多,多对多)
- DBA_实践指南系列6_Oracle Erp R12工作流通知邮件配置Email(案例)
- SpringMVC+Apache Shiro+JPA(hibernate)案例教学(一)整合配置
- Hibernate中一对多的注解和配置案例
- Spring MVC系列讲座二:与Hibernate的整合开发配置!
- hibernate一多一关联配置出错org.hibernate.MappingException:should be mapped with insert="false"update="false
- SpringMVC+Apache Shiro+JPA(hibernate)案例教学(一)整合配置
- J2EE系列之Hibernate4学习笔记(十七)--hibernate高级配置(配置连接池)
- hibernate关联配置
- Hibernate案例-------基于xml配置,使用Hibernate实现对员工表的增、删、改、查功能
- Entity Framework 6 Code First 实践系列(1):实体类配置-根据依赖配置关系和关联(补充多对多关系的配置)
- Hibernate相关配置文件、映射文件案例、工具类、总结相关
- Hibernate系列教程之二(SessionFactory配置)