hibernate学习(5)——多对多关系映射
2024-09-27 07:05:56
1、创建实体和映射
package com.alice.hibernate03.vo; import java.util.HashSet;
import java.util.Set; public class Student {
private Integer id;
private String sname;
private Set<Course> courses = new HashSet<Course>();
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
public Set<Course> getCourses() {
return courses;
}
public void setCourses(Set<Course> courses) {
this.courses = courses;
}
}
package com.alice.hibernate03.vo; import java.util.HashSet;
import java.util.Set; public class Course {
private Integer id;
private String cname;
private Set<Student> students = new HashSet<Student>();
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getCname() {
return cname;
}
public void setCname(String cname) {
this.cname = cname;
}
public Set<Student> getStudents() {
return students;
}
public void setStudents(Set<Student> students) {
this.students = students;
}
}
2、映射
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.alice.hibernate03.vo">
<class name="Student" table="t_student">
<id name="id" column="id">
<generator class="native"></generator>
</id>
<property name="sname" column="sname" type="string"></property>
<!-- 多对多关系 -->
<!--
set 表达集合
name: 集合的属性名
table:多对多中间表的表名
key 表达外键
column:引用我的外键名
many-to-many 表达多对多
class : 集合引用方的类型
column:对方在中间表的外键名
-->
<set name="courses" table="t_student_course" inverse="false" cascade="save-update">
<!--
key 用来描述外键
column : 外键的值
-->
<key column="sid"></key>
<many-to-many class="Course" column="cid"></many-to-many>
</set>
</class>
</hibernate-mapping>
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.alice.hibernate03.vo">
<class name="Course" table="t_course">
<id name="id" column="id">
<generator class="native"></generator>
</id>
<property name="cname" column="cname" type="string"></property>
<!-- 多对多关系 -->
<!--
set 表达集合
name: 集合的属性名
table:多对多中间表的表名
key 表达外键
column:引用我的外键名
many-to-many 表达多对多
class : 集合引用方的类型
column:对方在中间表的外键名
-->
<set name="students" table="t_student_course" inverse="true" cascade="save-update">
<key column="cid"></key>
<many-to-many class="Student" column="sid"></many-to-many>
</set>
</class>
</hibernate-mapping>
3、测试
package com.alice.hibernate03.many; import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test; import com.alice.hibernate03.util.HibernateUtil;
import com.alice.hibernate03.vo.Course;
import com.alice.hibernate03.vo.Student; public class ManyTest {
@Test
public void test01(){
//保存学生 => 通过学生保存课程. 由学生维护外键
//Student 的
//inverse = false
//cascade = save-update
//Course
//inverse = true
Session session = HibernateUtil.openSession();
Transaction tran = session.beginTransaction();
//...........................
Student s1 = new Student();
s1.setSname("angle"); Student s2 = new Student();
s2.setSname("echo"); Course c1 = new Course();
c1.setCname("jdbc"); Course c2 = new Course();
c2.setCname("spring"); Course c3 = new Course();
c3.setCname("strust2"); s1.getCourses().add(c1);
s1.getCourses().add(c2); s2.getCourses().add(c2);
s2.getCourses().add(c3); session.save(s1);
session.save(s2);
//...........................
tran.commit();
session.close();
}
}
最新文章
- JAVA 设计模式 桥接模式
- Android SDK 百度云盘分享链接
- PagerHelper-分页类
- hdu 1029 Ignatius ans the Princess IV
- bzoj4562: [Haoi2016]食物链--记忆化搜索
- Android IOS WebRTC 音视频开发总结(七一)-- H265/H264有何不同
- Visualize real-time data streams with Gnuplot
- 源码分析-mysql
- HDU 1005 Number Sequence(数列)
- 使用DBCP时发生AbstractMethodError异常
- 导出你的GAC Assembly中的DLLS
- ASP.NET MVC4 json序列化器
- jar包和war包的介绍与区别
- NKOJ4191 Trie树
- flink 学习
- css3的calc()
- JSON.parse()和jQuery.parseJSON()的区别
- Java运行时异常和非运行时异常
- uva639 回溯!
- PHP 404伪装
热门文章
- 分享一些不错的sql语句
- laravel安装笔记
- C Primer Plus_第5章_运算符、表达式和语句_编程练习
- LeetCode 26 Remove Duplicates from Sorted Array
- nodeJS搭建本地服务器
- datepicker使用
- myeclipse eclipse 使用git插件访问github 的解决方案
- 第二十八篇:SOUI中自定义控件开发过程
- 解决SVN Upgrade working copy问题
- LeetCode&mdash;&mdash;Best Time to Buy and Sell Stock III (股票买卖时机问题3)