zoukankan      html  css  js  c++  java
  • Hibernate(五)注解开发多对多

    举例:老师和学生

    teacher实体

    package cn.hibernate.annotationmapping;
    
    import org.hibernate.annotations.GenericGenerator;
    
    import javax.persistence.*;
    import java.util.HashSet;
    import java.util.Set;
    
    /**
     * Created by 17921 on 2017/12/31.
     */
    @Entity//将该类声明为一个实体
    @Table(name = "Teacher")//指定表的名称
    @GenericGenerator(name = "teid",strategy = "native")//创建主键生成策略
    public class Teacher {
        @Id//指定为表的ID
        @GeneratedValue(generator = "teid")//指定主键生成策略
        @Column(name = "tid")//对应数据表的类名
        private Integer tid;
        @Column(name = "tname")
        private String tname;
    
        @ManyToMany//多对多
        //中间表    中间表的名称        本实体对应中间表的列                      另一个实体对应中间表的列
        @JoinTable(name = "RStuTe",joinColumns={@JoinColumn(name = "tid")},inverseJoinColumns = {@JoinColumn(name = "sid")})
        private Set<Students> students=new HashSet<Students>();
    
    
        //省略getset方法
    }
    

      Student实体

    package cn.hibernate.annotationmapping;
    
    import org.hibernate.annotations.*;
    import org.hibernate.annotations.CascadeType;
    
    import javax.naming.Name;
    import javax.persistence.*;
    import javax.persistence.Entity;
    import javax.persistence.Table;
    import java.util.HashSet;
    import java.util.Set;
    
    /**
     * Created by 17921 on 2017/12/31.
     */
    @Entity//将该类声明为一个实体
    @Table(name = "Students")//指定表的名称
    @GenericGenerator(name = "stuid",strategy = "native")//创建主键生成策略
    public class Students {
        @Id//指定为表的ID
        @GeneratedValue(generator = "stuid")//指定主键生成策略
        @Column(name = "sid")//对应数据表的类名
        private Integer sid;
        @Column(name = "sname")
        private String sname;
    
        @ManyToMany()//多对多
        @Cascade(value = {CascadeType.SAVE_UPDATE})//级联
        //中间表    中间表的名称        本实体对应中间表的列                      另一个实体对应中间表的列
        @JoinTable(name = "RStuTe",joinColumns = {@JoinColumn(name = "sid")},inverseJoinColumns = {@JoinColumn(name = "tid")})
        private Set<Teacher> teachers=new HashSet<Teacher>();
    
    
       省略getset方法
    }
    

      单测

     @Test
        public void sel(){
            Teacher teacher1=new Teacher();
            teacher1.setTname("老袁");
            Teacher teacher2=new Teacher();
            teacher2.setTname("付老师");
            Teacher teacher3=new Teacher();
            teacher3.setTname("彪哥");
    
    
            Students students1=new Students();
            students1.setSname("老黑");
            Students students2=new Students();
            students2.setSname("小芮");
            Students students3=new Students();
            students3.setSname("城余");
    
    
            students1.getTeachers().add(teacher1);
            students1.getTeachers().add(teacher2);
            students2.getTeachers().add(teacher1);
            students2.getTeachers().add(teacher2);
            students3.getTeachers().add(teacher1);
            students3.getTeachers().add(teacher3);
    
            Session session = HibernateUtil.getSession();
            session.save(students1);
            session.save(students2);
            session.save(students3);
    
            HibernateUtil.closeSession();
            System.out.println("add ok!");
        }
    

      结果

    student表

    teacher表

    中间表

  • 相关阅读:
    日常工作不常用内容记录:
    python接口自动化(四)——试着实现以下主程序
    python接口自动化(三)——从excel中获取数据
    redis工具类
    Airtest新年“首更”,1.1.7版本抢先看!
    AirtestIDE有哪些好用但是非常隐蔽的小功能?
    年终力荐:网易一站式的自动化测试解决方案
    This和Prototype定义方法的区别
    新版 IDEA 发布,牛逼!网友:内存占用有所好转!
    where 1=1 是什么鬼?
  • 原文地址:https://www.cnblogs.com/wy0119/p/8168789.html
Copyright © 2011-2022 走看看