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();
}
}

最新文章

  1. JAVA 设计模式 桥接模式
  2. Android SDK 百度云盘分享链接
  3. PagerHelper-分页类
  4. hdu 1029 Ignatius ans the Princess IV
  5. bzoj4562: [Haoi2016]食物链--记忆化搜索
  6. Android IOS WebRTC 音视频开发总结(七一)-- H265/H264有何不同
  7. Visualize real-time data streams with Gnuplot
  8. 源码分析-mysql
  9. HDU 1005 Number Sequence(数列)
  10. 使用DBCP时发生AbstractMethodError异常
  11. 导出你的GAC Assembly中的DLLS
  12. ASP.NET MVC4 json序列化器
  13. jar包和war包的介绍与区别
  14. NKOJ4191 Trie树
  15. flink 学习
  16. css3的calc()
  17. JSON.parse()和jQuery.parseJSON()的区别
  18. Java运行时异常和非运行时异常
  19. uva639 回溯!
  20. PHP 404伪装

热门文章

  1. 分享一些不错的sql语句
  2. laravel安装笔记
  3. C Primer Plus_第5章_运算符、表达式和语句_编程练习
  4. LeetCode 26 Remove Duplicates from Sorted Array
  5. nodeJS搭建本地服务器
  6. datepicker使用
  7. myeclipse eclipse 使用git插件访问github 的解决方案
  8. 第二十八篇:SOUI中自定义控件开发过程
  9. 解决SVN Upgrade working copy问题
  10. LeetCode&mdash;&mdash;Best Time to Buy and Sell Stock III (股票买卖时机问题3)