Hibernate进阶之多对多双向关联

2024-04-16 13:32

本文主要是介绍Hibernate进阶之多对多双向关联,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

package cn.itcast.d_many22many;import java.util.Date;
import java.util.HashSet;
import java.util.Set;import javassist.expr.NewArray;/*** 项目* * @author Jie.Yuan* */
public class Student {private int id;private String name;private Set<Teacher> teachers=new HashSet<Teacher>();public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Set<Teacher> getTeachers() {return teachers;}public void setTeachers(Set<Teacher> teachers) {this.teachers = teachers;}@Overridepublic String toString() {return "Student [id=" + id + ", name=" + name + ", teachers="+ teachers + "]";}
}

package cn.itcast.d_many22many;import java.util.HashSet;
import java.util.Set;import javassist.expr.NewArray;/*** 开发人员* * @author Jie.Yuan* */
public class Teacher {private int id;private String name;private Set<Student> students;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Set<Student> getStudents() {return students;}public void setStudents(Set<Student> students) {this.students = students;}@Overridepublic String toString() {return "Teacher [id=" + id + ", name=" + name + ", students="+ students + "]";}}

student.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping package="cn.itcast.d_many22many"><class name="Student" table="student"><id name="id"><generator class="native"></generator></id><property name="name" column="name"/><set name="teachers" table="teacher_student"><key column="student_id"></key><!-- 查找这个学生被那个老师教 --><many-to-many class="Teacher" column="teacher_id"></many-to-many></set></class></hibernate-mapping>


teacher.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping package="cn.itcast.d_many22many"><class name="Teacher" table="teacher"><id name="id" column="id"><generator class="native"></generator></id><property name="name" 		column="name" /><set name="students" table="teacher_student"><!--查老师的id的  和中间表联系--><key column="teacher_id"/><!-- 查学生的id和中间表的关系 --><many-to-many class="Student" column="student_id"></many-to-many></set></class>
</hibernate-mapping>


测试类

package cn.itcast.d_many22many;import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;import org.hibernate.classic.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.junit.Test;import cn.itcast.d_many22many.Student;
import cn.itcast.d_many22many.Teacher;public class App_many22many {//双向多对多private static SessionFactory sf;static {sf = new Configuration().configure().addClass(Student.class)   .addClass(Teacher.class)   // 测试时候使用.buildSessionFactory();}@Testpublic void add(){Session session = sf.openSession();session.beginTransaction();Teacher t1 = new Teacher();t1.setName("王老师");Teacher t2 = new Teacher();t2.setName("李老师");Student s1 = new Student();s1.setName("王同学");Student s2 = new Student();s2.setName("李同学");Set<Student> ss = new HashSet<Student>();ss.add(s1);ss.add(s2);t1.setStudents(ss);// 告诉Hibernate老师教了那两个学生t2.setStudents(ss);session.save(t1);session.save(t2);session.save(s1);session.save(s2);session.getTransaction().commit();session.close();}@Testpublic void query(){//双向关联体现在查找上Session session = sf.openSession();session.beginTransaction();Teacher teacher = (Teacher) session.get(Teacher.class, 2);System.out.println("教室的姓名:" + teacher.getName());System.out.println("教室的学生列表:");Iterator<Student> iterator = teacher.getStudents().iterator();while (iterator.hasNext()) {Student student = iterator.next();System.out.println(student.getName() + "   ");}System.out.println("===========逆向==============");Student student = (Student) session.get(Student.class, 1);System.out.println("学生的姓名:" + student.getName());System.out.println("学生被教的老师:");Iterator<Teacher> iterator2 = student.getTeachers().iterator();while (iterator2.hasNext()) {Teacher teacher2 = iterator2.next();System.out.println(teacher2.getName() + "  ");}System.out.println();session.getTransaction().commit();session.close();}
}



这篇关于Hibernate进阶之多对多双向关联的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/908921

相关文章

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Java进阶13讲__第12讲_1/2

多线程、线程池 1.  线程概念 1.1  什么是线程 1.2  线程的好处 2.   创建线程的三种方式 注意事项 2.1  继承Thread类 2.1.1 认识  2.1.2  编码实现  package cn.hdc.oop10.Thread;import org.slf4j.Logger;import org.slf4j.LoggerFactory

csu1329(双向链表)

题意:给n个盒子,编号为1到n,四个操作:1、将x盒子移到y的左边;2、将x盒子移到y的右边;3、交换x和y盒子的位置;4、将所有的盒子反过来放。 思路分析:用双向链表解决。每个操作的时间复杂度为O(1),用数组来模拟链表,下面的代码是参考刘老师的标程写的。 代码如下: #include<iostream>#include<algorithm>#include<stdio.h>#

[MySQL表的增删改查-进阶]

🌈个人主页:努力学编程’ ⛅个人推荐: c语言从初阶到进阶 JavaEE详解 数据结构 ⚡学好数据结构,刷题刻不容缓:点击一起刷题 🌙心灵鸡汤:总有人要赢,为什么不能是我呢 💻💻💻数据库约束 🔭🔭🔭约束类型 not null: 指示某列不能存储 NULL 值unique: 保证某列的每行必须有唯一的值default: 规定没有给列赋值时的默认值.primary key:

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念

Flutter 进阶:绘制加载动画

绘制加载动画:由小圆组成的大圆 1. 定义 LoadingScreen 类2. 实现 _LoadingScreenState 类3. 定义 LoadingPainter 类4. 总结 实现加载动画 我们需要定义两个类:LoadingScreen 和 LoadingPainter。LoadingScreen 负责控制动画的状态,而 LoadingPainter 则负责绘制动画。

从0到1,AI我来了- (7)AI应用-ComfyUI-II(进阶)

上篇comfyUI 入门 ,了解了TA是个啥,这篇,我们通过ComfyUI 及其相关Lora 模型,生成一些更惊艳的图片。这篇主要了解这些内容:         1、哪里获取模型?         2、实践如何画一个美女?         3、附录:               1)相关SD(稳定扩散模型的组成部分)               2)模型放置目录(重要)

java学习,进阶,提升

http://how2j.cn/k/hutool/hutool-brief/1930.html?p=73689

【408DS算法题】039进阶-判断图中路径是否存在

Index 题目分析实现总结 题目 对于给定的图G,设计函数实现判断G中是否含有从start结点到stop结点的路径。 分析实现 对于图的路径的存在性判断,有两种做法:(本文的实现均基于邻接矩阵存储方式的图) 1.图的BFS BFS的思路相对比较直观——从起始结点出发进行层次遍历,遍历过程中遇到结点i就表示存在路径start->i,故只需判断每个结点i是否就是stop

java面试常见问题之Hibernate总结

1  Hibernate的检索方式 Ø  导航对象图检索(根据已经加载的对象,导航到其他对象。) Ø  OID检索(按照对象的OID来检索对象。) Ø  HQL检索(使用面向对象的HQL查询语言。) Ø  QBC检索(使用QBC(Qurey By Criteria)API来检索对象。 QBC/QBE离线/在线) Ø  本地SQL检索(使用本地数据库的SQL查询语句。) 包括Hibern