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();
// 保存,有关联关系
@Test
public 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();
}
}
// 获取,可以获取到关联的对方
@Test
public 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();
}
}
// 解除关联关系
@Test
public 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();
}
}
// 删除对象,对关联对象的影响
@Test
public 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();
}
}
}
Hibernate_映射_关联关系_多对多映射2
原创
©著作权归作者所有:来自51CTO博客作者wx62dfdc6aea345的原创作品,请联系作者获取转载授权,否则将追究法律责任
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
Hibernate_映射_关联关系_多对多映射1
多对多 多对多Student.hbm.xml
hibernate 外键 映射文件 -
Hibernate - 多对多关联关系映射
【1】单向多对多如Category:Item=n:n。在关系数据模型中,是需要一个中间表Category-Item来维持这种关联关系的。该表中存放Category_ID和Item_ID。
hibernate多对多 对象关联关系映射 hibernate 多对多 关联关系 -
Hibernate映射——多对多关联映射(八)
上篇博文【SSH进阶之路】Hibernate映射——一对多关联映射(据冗余的问题。
hibernate mybatis orm 映射 table -
Hibernate_映射_关联关系_一对多多对一映射1
值类型的集合 集合元素是普通类型实体类型的集合 集合元素是另外一个实体 一
hibernate xml 一对多 -
Hibernate - 单向多对一关联关系映射
在领域模型中, 类与类之间最普遍的关系就是关联关系。在 UML 中, 关联是有方向的。以 Customer 和 Order 为例: 一个用户
Hibernate多对一映射 hibernate 多对一 关联关系 -
Hibernate(4)——关系关联一对多映射
目录1. 班级——学生一对多映射;1. 班级——学生一对多映射;先建立Class班级类;package com.java.model;public class Class { private int id; private String name; public int getId() { return...
● 架构之美 ------【Hibernate】 关系关联一对多映射 架构 Hibernate -
Hibernate映射——多对一单向关联映射(四)
【SSH进阶之路】Hibernate基本原理(一) ,小编介绍了hibernate的基本原
hibernate 框架 orm 映射 mybatis