场景:一个Team对一个多个Student,其中Team中的studes属性为List类型

直接上代码,测试通过的:

Team.java

Java代码
  1. package com.fgh.hibernate;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. /**
  5. * 一的一方
  6. * @author fgh
  7. *
  8. */
  9. @SuppressWarnings("unchecked")
  10. public class Team {
  11. private String id;
  12. private String name;
  13. private List students = new ArrayList();
  14. public String getId() {
  15. return id;
  16. }
  17. public void setId(String id) {
  18. this.id = id;
  19. }
  20. public String getName() {
  21. return name;
  22. }
  23. public void setName(String name) {
  24. this.name = name;
  25. }
  26. public List getStudents() {
  27. return students;
  28. }
  29. public void setStudents(List students) {
  30. this.students = students;
  31. }
  32. }

Studeng.java

Java代码
  1. package com.fgh.hibernate;
  2. /**
  3. * 多的一方
  4. * @author fgh
  5. *
  6. */
  7. public class Student {
  8. private String id;
  9. private String cardId;
  10. private String name;
  11. private int age;
  12. private Team team;
  13. public String getId() {
  14. return id;
  15. }
  16. public void setId(String id) {
  17. this.id = id;
  18. }
  19. public String getCardId() {
  20. return cardId;
  21. }
  22. public void setCardId(String cardId) {
  23. this.cardId = cardId;
  24. }
  25. public String getName() {
  26. return name;
  27. }
  28. public void setName(String name) {
  29. this.name = name;
  30. }
  31. public int getAge() {
  32. return age;
  33. }
  34. public void setAge(int age) {
  35. this.age = age;
  36. }
  37. public Team getTeam() {
  38. return team;
  39. }
  40. public void setTeam(Team team) {
  41. this.team = team;
  42. }
  43. }

以下三个配置文件均放在src根目录下:

hibernate主配置文件:

hibernate.cfg.xml

Html代码
  1. <?xml version='1.0' encoding='UTF-8'?>
  2. <!DOCTYPE hibernate-configuration PUBLIC
  3. "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
  4. "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
  5. <!-- Generated by MyEclipse Hibernate Tools.                   -->
  6. <hibernate-configuration>
  7. <session-factory>
  8. <property name="connection.url">
  9. jdbc:mysql://localhost:3306/hibernate
  10. </property>
  11. <property name="connection.username">root</property>
  12. <property name="connection.password">root</property>
  13. <property name="connection.driver_class">
  14. com.mysql.jdbc.Driver
  15. </property>
  16. <property name="dialect">
  17. org.hibernate.dialect.MySQLDialect
  18. </property>
  19. <property name="show_sql">true</property>
  20. <!-- 引入两个相关配置文件 -->
  21. <mapping resource="Team.hbm.xml" />
  22. <mapping resource="Student.hbm.xml" />
  23. </session-factory>
  24. </hibernate-configuration>

一方配置文件: Team.hbm.xml

Html代码
  1. <?xml version="1.0"?>
  2. <!DOCTYPE hibernate-mapping PUBLIC
  3. "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  4. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
  5. <hibernate-mapping>
  6. <class name="com.fgh.hibernate.Team" table="team_list">
  7. <!-- 采用uuid生成主键 这里要指定type为string类型 -->
  8. <id name="id" column="id" type="string">
  9. <generator class="uuid"></generator>
  10. </id>
  11. <!-- 像类似这样的name属性 都是指类里面的成员变量 column指数据库中对应的字段名-->
  12. <property name="name" column="name" type="string"></property>
  13. <!-- 设置级联为 cascade="all"-->
  14. <list name="students" table="student_list" cascade="all">
  15. <!-- 维护对方的外键 -->
  16. <key column="team_id"></key>
  17. <!-- index标签表示多的一方 对应一的一方的索引位置
  18. column属性表示数据库中存放数据的字段
  19. index为关键字 避免跟关键字冲突 使用`index` 或 [index]
  20. -->
  21. <index column="[index]" type="string"></index>
  22. <!-- 建立一对多的关联 -->
  23. <one-to-many class="com.fgh.hibernate.Student" />
  24. </list>
  25. </class>
  26. </hibernate-mapping>

多方配置文件 : Studeng.hbm.xml

Html代码
  1. <?xml version="1.0"?>
  2. <!DOCTYPE hibernate-mapping PUBLIC
  3. "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  4. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
  5. <hibernate-mapping>
  6. <class name="com.fgh.hibernate.Student" table="student_list">
  7. <id name="id" column="id" type="string">
  8. <generator class="uuid"></generator>
  9. </id>
  10. <property name="cardId" column="card_id" type="string"></property>
  11. <property name="name" column="name" type="string"></property>
  12. <property name="age" column="age" type="int"></property>
  13. <!-- 因为list中的value 不是原始类型 所以要指定其类型 -->
  14. <!-- 建立多对一关联映射关系 column="team_id"表示team这张表通过该字段
  15. 和student表关联 -->
  16. <many-to-one name="team" column="team_id"
  17. class="com.fgh.hibernate.Team">
  18. </many-to-one>
  19. </class>
  20. </hibernate-mapping>

根据以上三个配置文件,可以生成对应的数据库表,代码如下:

CreateTable.java

Java代码
  1. package com.fgh.hibernate;
  2. import org.hibernate.cfg.Configuration;
  3. import org.hibernate.tool.hbm2ddl.SchemaExport;
  4. /**
  5. * 根据.hbm.xml配置文件创建相应的数据库表
  6. * @author fgh
  7. *
  8. */
  9. public class CreateTable {
  10. public static void main(String[] args) {
  11. SchemaExport export = new SchemaExport(new Configuration().configure());
  12. // 第一个参数表示是否在控制台打印出DDL语句(print the DDL to the console)
  13. // 第二个参数表示是否将脚本输出到数据库(export the script to the database)
  14. export.create(true, true);
  15. }
  16. }

运行CreateTable.java 生成对应表,后台打印sql如下:

Sql代码
  1. alter table student_list drop foreign key FKFEDE142211CB0B6A
  2. drop table if exists student_list
  3. drop table if exists team_list
  4. create table student_list (id varchar(255) not null, card_id varchar(255), name varchar(255), age integer, team_id varchar(255), `index` integer, primary key (id))
  5. create table team_list (id varchar(255) not null, name varchar(255), primary key (id))
  6. alter table student_list add index FKFEDE142211CB0B6A (team_id), add constraint FKFEDE142211CB0B6A foreign key (team_id) references team_list (id)

ok,表已经创建成功,下面测试保存操作:

InsertTest.java

Java代码
  1. package com.fgh.hibernate;
  2. import org.hibernate.Session;
  3. import org.hibernate.SessionFactory;
  4. import org.hibernate.Transaction;
  5. import org.hibernate.cfg.Configuration;
  6. /**
  7. * 保存操作测试类
  8. * @author fgh
  9. *
  10. */
  11. public class InsertTest {
  12. private static SessionFactory sessionFactory;
  13. //创建工厂实例
  14. static {
  15. try {
  16. sessionFactory = new Configuration().configure()
  17. .buildSessionFactory();
  18. } catch (Exception e) {
  19. e.printStackTrace();
  20. }
  21. }
  22. @SuppressWarnings("unchecked")
  23. public static void main(String[] args) {
  24. Session session = sessionFactory.openSession();
  25. Transaction tx = null;
  26. try {
  27. //创建两个team
  28. Team team = new Team();
  29. team.setName("team1");
  30. Team team2 = new Team();
  31. team2.setName("team2");
  32. //创建6个student对象
  33. Student student = new Student();
  34. student.setAge(20);
  35. student.setName("zhangsan");
  36. student.setTeam(team);
  37. Student student2 = new Student();
  38. student2.setAge(24);
  39. student2.setName("lisi");
  40. student2.setTeam(team);
  41. Student student3 = new Student();
  42. student3.setAge(24);
  43. student3.setName("student3");
  44. student3.setTeam(team2);
  45. Student student4 = new Student();
  46. student4.setAge(24);
  47. student4.setName("student4");
  48. student4.setTeam(team2);
  49. Student student5 = new Student();
  50. student5.setAge(24);
  51. student5.setName("student5");
  52. student5.setTeam(team2);
  53. //前两个student属于team
  54. team.getStudents().add(student);
  55. team.getStudents().add(student2);
  56. //后三个student属于team2
  57. team2.getStudents().add(student3);
  58. team2.getStudents().add(student4);
  59. team2.getStudents().add(student5);
  60. //开启事务
  61. tx = session.beginTransaction();
  62. //保存team和team2
  63. session.save(team);
  64. session.save(team2);
  65. System.out.println("save success!");
  66. //提交事务
  67. tx.commit();
  68. } catch (Exception e) {
  69. e.printStackTrace();
  70. if (null != tx) {
  71. tx.rollback();
  72. }
  73. } finally {
  74. session.close();
  75. }
  76. }
  77. }

控制打印sql如下:

Sql代码
  1. save success!
  2. Hibernate: insert into team_list (name, id) values (?, ?)
  3. Hibernate: insert into student_list (card_id, name, age, team_id, id) values (?, ?, ?, ?, ?)
  4. Hibernate: insert into student_list (card_id, name, age, team_id, id) values (?, ?, ?, ?, ?)
  5. Hibernate: insert into team_list (name, id) values (?, ?)
  6. Hibernate: insert into student_list (card_id, name, age, team_id, id) values (?, ?, ?, ?, ?)
  7. Hibernate: insert into student_list (card_id, name, age, team_id, id) values (?, ?, ?, ?, ?)
  8. Hibernate: insert into student_list (card_id, name, age, team_id, id) values (?, ?, ?, ?, ?)
  9. Hibernate: update student_list set team_id=?, `index`=? where id=?
  10. Hibernate: update student_list set team_id=?, `index`=? where id=?
  11. Hibernate: update student_list set team_id=?, `index`=? where id=?
  12. Hibernate: update student_list set team_id=?, `index`=? where id=?
  13. Hibernate: update student_list set team_id=?, `index`=? where id=?

02-04插入的是team
05-08插入的是team2

09-13是对student_list表中外键team_id,和排序字段index的维护

student_list表中记录如下:

Sql代码
  1. id                    name    age           team_id
Sql代码
  1. 8a8adb7b34a45b700134a45b72130002 zhangsan  20  8a8adb7b34a45b700134a45b71fc00010
  2. 8a8adb7b34a45b700134a45b72130003 lisi      24  8a8adb7b34a45b700134a45b71fc00011
  3. 8a8adb7b34a45b700134a45b72130005 student3  24  8a8adb7b34a45b700134a45b721300040
  4. 8a8adb7b34a45b700134a45b72130006 student4  24  8a8adb7b34a45b700134a45b721300041
  5. 8a8adb7b34a45b700134a45b72140007 student5  24  8a8adb7b34a45b700134a45b721300042

team_list表中记录:

Sql代码
  1. 8a8adb7b34a467320134a46733cc0001    team1
  2. 8a8adb7b34a467320134a46733e40004    team2

hibernate中List一对多映射关系详解相关推荐

  1. UML 中的六大关系详解

    UML中的六大关系   在UML类图中,常见的有以下几种关系: 泛化(Generalization), 实现(Realization),关联(Association),聚合(Aggregation), ...

  2. Hibernate 中Criteria Query查询详解

    当查询数据时,人们往往需要设置查询条件.在SQL或HQL语句中,查询条件常常放在where子句中.此外,Hibernate还支持Criteria查询(Criteria Query),这种查询方式把查询 ...

  3. one-many和many-one的关系中的inverse的详解

    在one-many和many-one的关系中的inverse的详解. 1.现在假设有两个类Customer与Order,一个Customer可以有多个Order 2. 如果在Customer.hbm. ...

  4. Java中常见RuntimeException与其他异常表及Exception逻辑关系详解

    Java中常见RuntimeException与其他异常表及Exception逻辑关系详解 前言 常见`RuntimeException` 其他错误类型 `Error`类 `Exception`类 E ...

  5. Hibernate配置文件与映射文件详解

    Hibernate是一个彻底的ORM(Object Relational Mapping,对象关系映射)开源框架. 我们先看一下官方文档所给出的,Hibernate 体系结构的高层视图: 其中PO=P ...

  6. php中 继承中的概念,JavaScript_JavaScript中的继承方式详解,js继承的概念 js里常用的如下 - phpStudy...

    JavaScript中的继承方式详解 js继承的概念 js里常用的如下两种继承方式: 原型链继承(对象间的继承) 类式继承(构造函数间的继承) 由于js不像java那样是真正面向对象的语言,js是基于 ...

  7. java中的进制输出转换_Java I/O : Java中的进制详解

    作者:李强强 上一篇,泥瓦匠基础地讲了下Java I/O : Bit Operation 位运算.这一讲,泥瓦匠带你走进Java中的进制详解. 一.引子 在Java世界里,99%的工作都是处理这高层. ...

  8. Java中的main()方法详解

    源文作者:leizhimin    源文链接:http://lavasoft.blog.51cto.com/62575/53263 源文作者版权申明: 版权声明:原创作品,允许转载,转载时请务必以超链 ...

  9. UML类图与类的关系详解

    UML类图与类的关系详解   2011-04-21 来源:网络   在画类图的时候,理清类和类之间的关系是重点.类的关系有泛化(Generalization).实现(Realization).依赖(D ...

最新文章

  1. 使用ganymed-ssh2-build通过ssh获得远程服务器参数
  2. 207. Course Schedule 课程表
  3. java做日历怎么对齐日期_如何使用Java日历从日期中减去X天?
  4. 话剧《白鹿原》:叫人乍舌,令人唏嘘,也让人捏把汗(图)
  5. hdu 2579 BFS
  6. 使用云原生应用和开源技术的创新攻略
  7. Eclipse快捷键生成语句
  8. 机器学习笔记十一之降维
  9. 狮子鱼社区团购独立版V15.3.0源码
  10. 在Blazor中构建数据库应用程序——第5部分——查看组件——UI中的CRUD列表操作
  11. SpringCloud实战2-Ribbon客户端负载均衡
  12. .htaccess文件玩转Rewrite
  13. PS 在PS中如何等比例放大缩小图片
  14. 怎样压缩图片到100k?如何把电脑图片缩小kb?
  15. 关于裁员几点看法及建议
  16. 寻找四叶草HTML5小游戏,寻找四叶草的作文四百字
  17. iphone13 Pro的运行内存是6gb
  18. 商贸零售行业2021年投资策略:市场下沉、渠道效率升级,新品牌新业态乘风而起
  19. Linux C/C++程序崩溃bug调试方法
  20. topcoder入门

热门文章

  1. 如何修改markdown中图片的大小
  2. C语言-动态创建二维数组
  3. 【错误记录】Groovy 函数参数动态类型报错 ( Caught: groovy.lang.MissingMethodException: No signature of method )
  4. 【Android 安全】DEX 加密 ( Application 替换 | 分析 BroadcastReceiver 组件中调用 getApplication() 获取的 Application )
  5. 【错误记录】布局组件加载错误 ( Attempt to invoke virtual method ‘xxx$Callback android.view.Window.getCallback()‘ )
  6. 【错误记录】Android 应用安装报错 ( The application could not be installed: INSTALL_FAILED_CONFLICTING_PROVIDER )
  7. 【Netty】Netty 核心组件 ( Future | Channel | Selector | ChannelHandler )
  8. 使用Mybatis Generator自动生成代码
  9. 使用Filezilla Server配置FTP服务器
  10. 【软件构造】第三章第三节 抽象数据型(ADT)