• 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表

    中间表

  • 相关阅读:
    linux 命令——19 find (转)
    linux 命令——18 locate (转)
    linux 命令——17 whereis(转)
    linux 命令——16 which(转)
    linux 命令——15 tail (转)
    linux 命令——14 head (转)
    Java for LeetCode 038 Count and Say
    Java for LeetCode 037 Sudoku Solver
    Java for LeetCode 036 Valid Sudoku
    Java for LeetCode 035 Search Insert Position
  • 原文地址:https://www.cnblogs.com/wy0119/p/8168789.html
Copyright © 2020-2023  润新知