Hibernate_映射_关联关系_多对多映射2
来源:互联网 发布:国泰君安快期交易软件 编辑:程序博客网 时间:2024/05/01 13:47
package cn.itcast.g_hbm_manyToMany;import java.util.HashSet;import java.util.Set;/** * 学生 * * @author 风清杨 * @version V1.0 */public class Student {private Long id;private String name;private Set teachers = new HashSet ();// 关联得老师位public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Set getTeachers() {return teachers;}public void setTeachers(Set teachers) {this.teachers = teachers;}@Overridepublic String toString() {return "Student [id=" + id + ", name=" + name + "]";}}package cn.itcast.g_hbm_manyToMany;import java.util.HashSet;import java.util.Set;/** * 老师 * * @author 风清杨 * @version V1.0 */public class Teacher {private Long id;private String name;private Set students = new HashSet ();// 关联的学生们public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Set getStudents() {return students;}public void setStudents(Set students) {this.students = students;}@Overridepublic String toString() {return "Teacher [id=" + id + ", name=" + name + "]";}}private static SessionFactory sessionFactory = new Configuration()//.configure()//.addClass(Student.class)// 添加Hibernate实体类(加载对应的映射文件).addClass(Teacher.class)// 添加Hibernate实体类(加载对应的映射文件).buildSessionFactory();
package cn.itcast.g_hbm_manyToMany;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.cfg.Configuration;import org.junit.Test;/** * 应用程序操作类 * * @author 风清杨 * @version V3.0 * */public class App {private static SessionFactory sessionFactory = new Configuration()//.configure()//.addClass(Student.class)// 添加Hibernate实体类(加载对应的映射文件).addClass(Teacher.class)// 添加Hibernate实体类(加载对应的映射文件).buildSessionFactory();// 保存,有关联关系@Testpublic void testSave() throws Exception {Session session = sessionFactory.openSession();Transaction tx = null;try {tx = session.beginTransaction();// ------------------------------------// 构建老师对象Teacher teachers1 = new Teacher();teachers1.setName("张老师");Teacher teachers2 = new Teacher();teachers2.setName("赵老师");// 构建学生对象Student students1 = new Student();students1.setName("王小明");Student students2 = new Student();students2.setName("李冰冰");// 关联起来students1.getTeachers().add(teachers1);students1.getTeachers().add(teachers2);students2.getTeachers().add(teachers2);teachers1.getStudents().add(students1);teachers2.getStudents().add(students1);teachers2.getStudents().add(students2);// 保存session.save(students1);session.save(students2);session.save(teachers1);session.save(teachers2);// ------------------------------------tx.commit();} catch (RuntimeException e) {tx.rollback();throw e;} finally {session.close();}}// 获取,可以获取到关联的对方@Testpublic void testGet() throws Exception {Session session = sessionFactory.openSession();Transaction tx = null;try {tx = session.beginTransaction();// ------------------------------------// 获取一方数据,并显示另一方信息Teacher teacher = (Teacher) session.get(Teacher.class, 2L);System.out.println(teacher);System.out.println(teacher.getStudents());// ------------------------------------tx.commit();} catch (RuntimeException e) {tx.rollback();throw e;} finally {session.close();}}// 解除关联关系@Testpublic void testRemoveRelation() throws Exception {Session session = sessionFactory.openSession();Transaction tx = null;try {tx = session.beginTransaction();// ------------------------------------// 如果inverse=false就可以解除,如果为true就不可以解除Teacher teacher = (Teacher) session.get(Teacher.class, 2L);teacher.getStudents().clear();// ------------------------------------tx.commit();} catch (RuntimeException e) {tx.rollback();throw e;} finally {session.close();}}// 删除对象,对关联对象的影响@Testpublic void testDelete() throws Exception {Session session = sessionFactory.openSession();Transaction tx = null;try {tx = session.beginTransaction();// ------------------------------------// 删除部门方(一方)// a,如果没有关联的对方:// b,如果有关联的对方且inverse=false,由于可以维护关联关系,它就会先删除关联关系,再删除自已。// c,如果有关联的对方且inverse=true,由于不能维护关联关系,所以会直接执行删除自已,就会有异常。Teacher teacher = (Teacher) session.get(Teacher.class, 6L);session.delete(teacher);// ------------------------------------tx.commit();} catch (RuntimeException e) {tx.rollback();throw e;} finally {session.close();}}}
0 0
- Hibernate_映射_关联关系_多对多映射2
- Hibernate_映射_关联关系_多对多映射1
- Hibernate_映射_关联关系_一对多多对一映射2、inverse属性
- Hibernate_映射_关联关系_一对多多对一映射1
- Hibernate_映射_关联关系_一对一映射2_基于外键的方式
- Hibernate_映射_关联关系_cascade属性、单向关联
- Hibernate_映射_关联关系_一对一映射1__映射基础
- 16. Hibernate_映射多对多关联关系
- Hibernate_映射_关联关系_一对一映射3_基于主键的方式
- Hibernate关系映射(10)_多对多单向关联
- Hibernate关系映射(11)_多对多双向关联
- Hibernate关系映射(7)_多对一单向关联
- Hibernate关系映射(9)_多对一双向关联
- Hibernate关联关系映射_单边多对一
- Hibernate关联关系映射_多对一双边
- Hibernate_多对多_单向关联
- Hibernate_一对多_多对一_双向关联
- Hibernate关系映射(8)_一对多单向关联
- java制作PVP五子棋游戏
- 清除之前绘制的path
- spark-streaming-[9]-SparkStreaming消费Kafka-Direct Approach
- Servlet总结
- Java多线程/并发25、Exchanger线程数据交换
- Hibernate_映射_关联关系_多对多映射2
- win10 opencv 项目程序移植到 ubuntu16.04: 3.项目自启动和修改分辨率
- 电脑组装之前期摸索一
- 总结String类字符串与其他类型的转换
- LeetCoder 16 3Sum Closest
- 标准对话框
- JavaScript之对象
- 阿里云ECS+CentOS 7.0+Docker+Redmine环境搭建
- requestDispatcher和sendRedirect的区别和联系