hibernate建表 一对多 多的一方控制一的一方
一对多 单向
<one-to-many>
通过calss操作student 外键在student表中,所以外键由student维护
<many-to-one>
通过student操作class 外键在student中,所以自动维护student的外键 没有inverse属性
建议用多对一这个方向的操作效率比较高
Student.java
1 package cn.itcast.hiberate.sh.domain; 2 3 public class Student { 4 private Long sid; 5 private String sname; 6 private String description; 7 Classes classes; 8 9 public Classes getClasses() { 10 return classes; 11 } 12 public void setClasses(Classes classes) { 13 this.classes = classes; 14 } 15 public Long getSid() { 16 return sid; 17 } 18 public void setSid(Long sid) { 19 this.sid = sid; 20 } 21 public Student(String sname, String description) { 22 super(); 23 this.sname = sname; 24 this.description = description; 25 } 26 public Student() { 27 // TODO Auto-generated constructor stub 28 } 29 public String getSname() { 30 return sname; 31 } 32 public void setSname(String sname) { 33 this.sname = sname; 34 } 35 public String getDescription() { 36 return description; 37 } 38 public void setDescription(String description) { 39 this.description = description; 40 } 41 42 }
Student.hbm.xml
1 <?xml version="1.0" encoding="utf-8"?> 2 <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 3 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 4 <hibernate-mapping> 5 <class name="cn.itcast.hiberate.sh.domain.Student"> 6 <id name="sid" length="5"> 7 <generator class="increment"></generator> 8 </id> 9 <property name="sname" length="20"></property> 10 <property name="description" length="100"></property> 11 <!-- 12 多对一 13 column 外键 14 --> 15 <many-to-one name="classes" class="cn.itcast.hiberate.sh.domain.Classes" column="cid" cascade="save-update"></many-to-one> 16 </class> 17 </hibernate-mapping>
test.java语句
1 package cn.itcast.hibernate.sh.test; 2 3 import java.util.HashSet; 4 import java.util.Set; 5 6 import org.hibernate.Session; 7 import org.hibernate.Transaction; 8 import org.junit.Test; 9 10 import cn.itcast.hiberate.sh.domain.Classes; 11 import cn.itcast.hiberate.sh.domain.Student; 12 import cn.itcast.hibernate.sh.utils.HiberanteUtils; 13 14 /** 15 * 3、新建一个班级的时候同时新建一个学生 16 * 4、已经存在一个班级,新建一个学生,建立学生与班级之间的关系 17 * 5、已经存在一个学生,新建一个班级,把学生加入到该班级 18 * 6、把一个学生从一个班级转移到另一个班级 19 * 7、解析一个班级和一个学生之间的关系 20 * 8、解除一个班级和一些学生之间的关系 21 * 9、解除该班级和所有的学生之间的关系 22 * 10、已经存在一个班级,已经存在一个学生,建立该班级与该学生之间的关系 23 * 11、已经存在一个班级,已经存在多个学生,建立多个学生与班级之间的关系 24 * 12、删除学生 25 * 13、删除班级 26 * 删除班级的时候同时删除学生 27 * 在删除班级之前,解除班级和学生之间的关系 28 * @author Think 29 * 30 */ 31 public class OneToManyTest extends HiberanteUtils{ 32 @Test 33 public void testSaveStudent_Cascade_Classes_Save(){ 34 Session session = sessionFactory.openSession(); 35 Transaction transaction = session.beginTransaction(); 36 Student student = new Student(); 37 student.setSname("班秘"); 38 student.setDescription("很神秘的一个工作"); 39 40 Classes classes = new Classes(); 41 classes.setCname("老毕亲子班"); 42 classes.setDescription("都是老毕的亲戚"); 43 44 student.setClasses(classes); 45 // Set<Student> students = new HashSet<Student>(); 46 // students.add(student); 47 // 48 // classes.setStudents(students); 49 session.save(student); 50 51 transaction.commit(); 52 session.close(); 53 } 54 55 56 /** 57 * 一对多,从多的一端维护关系效率比较高 58 */ 59 @Test 60 public void testSaveStudent_R(){ 61 Session session = sessionFactory.openSession(); 62 Transaction transaction = session.beginTransaction(); 63 64 Student student = new Student(); 65 student.setSname("这个人"); 66 student.setDescription("很好"); 67 68 Classes classes = (Classes)session.get(Classes.class, 2L); 69 student.setClasses(classes); 70 71 //Set<Student> students = new HashSet<Student>(); 72 //students.add(student); 73 74 //classes.getStudents().add(student);//在hibernate内部查看的是classes.hbm.xml 75 76 session.save(student);//在hibernate内部查看的是Student.hbm.xml 77 transaction.commit(); 78 session.close(); 79 } 80 81 @Test 82 public void testRelese_R(){ 83 Session session = sessionFactory.openSession(); 84 Transaction transaction = session.beginTransaction(); 85 Classes classes = (Classes)session.get(Classes.class, 2L); 86 Student student7 = (Student)session.get(Student.class, 7L); 87 Student student8 = (Student)session.get(Student.class, 8L); 88 student7.setClasses(null); 89 student8.setClasses(null); //也可以用以下替代
Classes classes=(Classes) session.get(Classes.class, 9L);
Set<Student> stu=classes.getStudents();
for(Student s:stu)
s.setClasses(null);
90 transaction.commit(); 91 session.close(); 92 } 93 }
转载于:https://www.cnblogs.com/friends-wf/p/3776134.html
hibernate建表 一对多 多的一方控制一的一方相关推荐
- 数据库建表-- 一对多/多对一/一对一/多对多 关系
转自: https://blog.csdn.net/zhongshan_c/article/details/8210196 数据库建表-- 一对多/多对一/一对一/多对多 关系 关联映射:一对多 ...
- oracle建表代码,Oracle 建表(一对多)代码及相关约束示例
建表(一对多)代码及相关约束 create table t_class( c_id number(3) primary key, c_name varchar2(20) not null ); cre ...
- 【2 - 数据库是如何存储数据的】Sql Server - 郝斌(字段、记录、表;图形化界面及sql语句建表;六种约束;一对一、一对多、多对多、数据库关系图;主外键)
课程地址:数据库 SQLServer 视频教程全集(99P)| 22 小时从入门到精通_哔哩哔哩_bilibili 目录 数据库是如何解决数据存储问题的 1. 表的相关数据 2. create tab ...
- Hibernate详细进阶教程(从建表到实现表的操作)
1.Hibernate主键生成策略 自然主键:把具有业务含义的字段作为主键,称之为自然主键.例如在customer表中,如果把name作为主键,其前提条件必须是:每一个客户的姓名不允许为null,不允 ...
- hibernate mysql 自动建表_配置hibernate根据实体类自动建表功能
Hibernate支持自动建表,在开发阶段很方便,可以保证hbm与数据库表结构的自动同步. 如何使用呢?很简单,只要在hibernate.cfg.xml里加上如下代码 Xml代码update upda ...
- 配置hibernate根据实体类自动建表功能
Hibernate支持自动建表,在开发阶段很方便,可以保证hbm与数据库表结构的自动同步. 如何使用呢?很简单,只要在hibernate.cfg.xml里加上如下代码 Xml代码<propert ...
- Springboot 之 Hibernate自动建表(Mysql)
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 引入Maven依赖包 <dependency><groupId>org.sp ...
- 打包jar文件后的spring部署及hibernate自动建表经验总结
楔子 用spring+hibernate做一个服务器运行程序,在部署到服务器时(打包成jar,在window server2008下运行),出现了以下两个纠结问题: 1. 加载不了Spring容器 2 ...
- Hibernate无法自动建表的缘故
说一下我的缘故:根本原因是建表的SQL语句错误,不同的版本的hibernate-core包下的不同的Dialect使用的SQL是不一样的,我开启了show-sql后,控制台打印如下: Hibernat ...
最新文章
- mysql 4.0.27 下载,CentOS编译Mysql 4.0.27数据库问题解决
- Kafka如何对Topic元数据进行细粒度的懒加载、同步等待?
- 多线程之:用户态和内核态的区别
- 阿里云服务器1M带宽是多少
- Spring 的设计初衷
- halcon对光源打光不均匀进行平场矫正
- P3521-[POI2011]ROT-Tree【线段树合并】
- 将华氏温度转化成摄氏度和绝对温度
- Java多线程学习三十三:Future 的主要功能是什么?
- 14. 税收规则(Tax Rules)
- 超级计算器——两个大数相乘
- Ubuntu 使用 Cron 实现计划任务
- 体外诊断(IVD)行业系列四:快速崛起的独立医学实验室
- 知识图谱实体预测任务如何计算filtered MRR
- latch mysql_关于MySQL latch争用深入分析与判断
- 1024购书狂欢节,优惠券送给有需要的伙伴们
- 区块链最可能大规模应用场景:社交网络和共享经济
- 数字后端知识点扫盲——Floorplan
- win10和Ubuntu18.04双系统开机后不能进入win10界面的问题
- 假装自己是“黑客”二
热门文章
- MySQL数据库设计总结
- Android之玩转MPAndroidChart让(折线图、柱形图、饼状图、散列图、雷达图)优雅的舞...
- C语言学习笔记(五) 数组
- Hadoop入门连接
- Validation-jQuery表单验证插件使用方法
- 关于软件质量(2)- 开发 vs 测试
- PB做的史上最强的矢量图监控软件(什么组态软件与监控软件的核心都源于此原理)...
- 语言沟通6c,如何做到轻松有效沟通
- spring管理hibernate的SessionFactory-多种配置方法
- golang中的strings.TrimPrefix