Hibernate教程之七多对多实现基于xml和注解
2017-07-21 17:46
507 查看
在上一篇博客中我们说了一对多和多对一,那么本篇就谢谢多对多的2种实现基于xml和注解的
比如订单和商品,一个商品可能对应多个订单,一个订单也可能对应多个商品,所以就存在多对多。
一般在分析多对多的时候,容易搞混,我一般都是分析2个表如果彼此都是一对多那么就是多对多
学生和课程、学生和电影、订单和商品、学生和教师等都是多对多的关系
那么我们就使用学生和课程
Syudent类:
Cource类
Student类的配置文件:
Cource类的配置文件:
以上就是通过xml来实现多对多的配置,其实就是借助第三张表来实现的。
下面我们看看如何通过注解来实现多对多
Student类:
Cource类:
以上就是使用注解来实现多对多,但是需要注意:
@JoinTable
多对多的时候的关系表
常用属性:
name:关系表名
joinColumns:外键字段名称,当前类在关系表中的外键名称,得使用注解@JoinColumns
inverseJoinColumns:存在多对多关系的另一方在关系表中的外键名称
比如订单和商品,一个商品可能对应多个订单,一个订单也可能对应多个商品,所以就存在多对多。
一般在分析多对多的时候,容易搞混,我一般都是分析2个表如果彼此都是一对多那么就是多对多
学生和课程、学生和电影、订单和商品、学生和教师等都是多对多的关系
那么我们就使用学生和课程
Syudent类:
//学生--演示的是多对多:一名学生可以选择多门课程 public class Student { private int id; private String name; private Set<Cource> cources; 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<Cource> getCources() { return cources; } public void setCources(Set<Cource> cources) { this.cources = cources; } }
Cource类
//课程--多对多:一门课程可以被多名学生选择 public class Cource { 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; } }
Student类的配置文件:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping SYSTEM "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd" > <hibernate-mapping package="cn.code404.manytomany"> <class name="Student" table="tb_student"> <!--id:主键,name:属性名称,column:字段名称 --> <id name="id" column="id"> <generator class="identity"/> </id> <!--配置属性对应的字段 --> <property name="name" length="50" /> <!--配置多对多 --> <set name="cources" table="tb_sc"> <!--设置对应的外键, column:外键名称,该外键就是来自本类的主键 --> <key column="sid"></key> <!--配置多对多 class:标记与谁多对多 column:标记关系表中的字段名称 --> <many-to-many class="Cource" column="cid"></many-to-many> </set> </class> </hibernate-mapping>
Cource类的配置文件:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping SYSTEM "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd" > <hibernate-mapping package="cn.code404.manytomany"> <class name="Cource" table="tb_cource"> <!--id:主键,name:属性名称,column:字段名称 --> <id name="id" column="id"> <generator class="identity"/> </id> <!--配置属性对应的字段 --> <property name="name" length="50" /> <!--配置多对多 table:关系表的表名 --> <set name="students" table="tb_sc"> <!--设置对应的外键, column:外键名称,该外键就是来自本类的主键 --> <key column="cid"></key> <!--配置多对多 class:标记与谁多对多 column:标记关系表中的字段名称 --> <many-to-many class="Student" column="sid"></many-to-many> </set> </class> </hibernate-mapping>
以上就是通过xml来实现多对多的配置,其实就是借助第三张表来实现的。
下面我们看看如何通过注解来实现多对多
Student类:
//学生--演示的是多对多:一名学生可以选择多门课程 @Entity @Table(name = "tb_student") public class Student { @Id // 主键 @GeneratedValue(strategy = GenerationType.IDENTITY) // 主键生成策略 private int id; @Column(length = 20) private String name; // 多对多注解实现 @ManyToMany @JoinTable(name = "tb_p_c", // 关系表名称 joinColumns = { @JoinColumn(name = "sid") }, // 当前表在关系表中的外键名称 inverseJoinColumns = { @JoinColumn(name = "cid") }// 多对多的外键名称 ) private Set<Cource> cources; 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<Cource> getCources() { return cources; } public void setCources(Set<Cource> cources) { this.cources = cources; } }
Cource类:
//课程--多对多:一门课程可以被多名学生选择 @Entity @Table(name = "tb_cource") public class Cource { @Id // 主键 @GeneratedValue(strategy = GenerationType.IDENTITY) // 主键生成策略 private int id; @Column(length = 50) private String name; // 多对多注解实现 @ManyToMany @JoinTable(name = "tb_p_c", // 关系表名称 joinColumns = { @JoinColumn(name = "cid") }, // 当前表在关系表中的外键名称 inverseJoinColumns = { @JoinColumn(name = "sid") }// 多对多的外键名称 ) 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; } }
以上就是使用注解来实现多对多,但是需要注意:
@JoinTable
多对多的时候的关系表
常用属性:
name:关系表名
joinColumns:外键字段名称,当前类在关系表中的外键名称,得使用注解@JoinColumns
inverseJoinColumns:存在多对多关系的另一方在关系表中的外键名称
相关文章推荐
- Hibernate教程之五一对一实现基于xml和注解
- Hibernate教程之六一对多&多对一实现基于xml和注解
- hibernate教程____hibernate持久化(基于实体类注解和hbm.xml映射文件区别)
- hibernate实现有两种配置,xml配置与注解配置
- Hibernate中,Many2One的基于注解Annotation的实现
- 基于Struts2和hibernate的WebSocket聊天室的实现教程一:环境搭建
- Hibernate基于注解方式配置来实现实体和数据库之间存在某种映射关系
- Hibernate基于【XML】和【注解】——完整实例
- Hibernate基于注解的双向one-to-many映射关系的实现
- 基于Struts2和hibernate的WebSocket聊天室的实现教程三:Hibernate个人信息管理
- 基于Struts2和hibernate的WebSocket聊天室的实现教程四:实现登录接口
- Hibernate中,One2One的基于注解Annotation的实现
- hibernate教程____hibernate时启动创建表结构(使用实体类注解不用hbm.xml)
- 基于Struts2和hibernate的WebSocket聊天室的实现教程二:发送在线列表
- MyBatis系列教程(二)--模拟实现基于XML和Annotation的小型Mybatis(Simulation)
- Hibernate案例-------基于xml配置,使用Hibernate实现对员工表的增、删、改、查功能
- 【JavaWeb-24】AOP介绍和术语、手动/半自动/自动实现AOP、基于XML和注解的AspectJ使用、JdbcTemplate的使用
- hibernate基于XML 与基于注解的配置
- hibernate基于注解实现映射关系的配置
- Hibernate中,One2Many和Many2One的双向映射关系的基于注解Annotation实现方式