hibernate 多对多的增删改操作

今天为了要完成一个多对多的操作功能,做了一个下面的测试,现将代码贴出:

  1. package com.myHibernate.vo;  
  2.   
  3. import java.util.Set;  
  4.   
  5. import javax.persistence.CascadeType;  
  6. import javax.persistence.Column;  
  7. import javax.persistence.Entity;  
  8. import javax.persistence.FetchType;  
  9. import javax.persistence.GeneratedValue;  
  10. import javax.persistence.GenerationType;  
  11. import javax.persistence.Id;  
  12. import javax.persistence.JoinColumn;  
  13. import javax.persistence.JoinTable;  
  14. import javax.persistence.ManyToMany;  
  15. import javax.persistence.ManyToOne;  
  16. import javax.persistence.SequenceGenerator;  
  17. import javax.persistence.Table;  
  18.   
  19. @Entity  
  20. @Table(name="STUDENTS")  
  21. @SequenceGenerator(name="SEQ_STUDENTS",sequenceName="SEQ_STUDENTS",allocationSize=1,initialValue=1)  
  22. public class Student {  
  23.   
  24.       
  25.     private Long id;  
  26.       
  27.     private String code;  
  28.       
  29.     private String name;  
  30. //  @Column(name="TECH_ID")  
  31. //  private Long techId;  
  32.       
  33. //  private Teacher teacher;  
  34.       
  35.     private Set<Course> courses;  
  36.       
  37.     @Id  
  38.     @GeneratedValue(generator="SEQ_STUDENTS",strategy=GenerationType.SEQUENCE)  
  39.     @Column(name="id")  
  40.     public Long getId() {  
  41.         return id;  
  42.     }  
  43.     public void setId(Long id) {  
  44.         this.id = id;  
  45.     }  
  46.       
  47.     @Column(name="CODE")  
  48.     public String getCode() {  
  49.         return code;  
  50.     }  
  51.     public void setCode(String code) {  
  52.         this.code = code;  
  53.     }  
  54.       
  55.     @Column(name="NAME")  
  56.     public String getName() {  
  57.         return name;  
  58.     }  
  59.     public void setName(String name) {  
  60.         this.name = name;  
  61.     }  
  62.       
  63. //  public Long getTechId() {  
  64. //      return techId;  
  65. //  }  
  66. //  public void setTechId(Long techId) {  
  67. //      this.techId = techId;  
  68. //  }  
  69.       
  70. //  @ManyToOne()  
  71. //  @JoinColumn(name="TECH_ID")  
  72. //  public Teacher getTeacher() {  
  73. //      return teacher;  
  74. //  }  
  75. //  public void setTeacher(Teacher teacher) {  
  76. //      this.teacher = teacher;  
  77. //  }  
  78.       
  79.     @ManyToMany(cascade=CascadeType.ALL,fetch=FetchType.LAZY)  
  80.     @JoinTable(name="STUDENTS_COURSES",joinColumns=@JoinColumn(name="FK_STU_ID"),  
  81.             inverseJoinColumns=@JoinColumn(name="FK_COU_ID"))  
  82.     public Set<Course> getCourses() {  
  83.         return courses;  
  84.     }  
  85.     public void setCourses(Set<Course> courses) {  
  86.         this.courses = courses;  
  87.     }  
  88. }  


 

  1. package com.myHibernate.vo;  
  2.   
  3. import java.util.Set;  
  4.   
  5. import javax.persistence.Column;  
  6. import javax.persistence.Entity;  
  7. import javax.persistence.GeneratedValue;  
  8. import javax.persistence.GenerationType;  
  9. import javax.persistence.Id;  
  10. import javax.persistence.ManyToMany;  
  11. import javax.persistence.SequenceGenerator;  
  12. import javax.persistence.Table;  
  13.   
  14. @Entity  
  15. @Table(name="COURSES")  
  16. @SequenceGenerator(name="SEQ_COURSES",sequenceName="SEQ_COURSES",allocationSize=1)  
  17. public class Course {  
  18.   
  19.     @Id  
  20.     @GeneratedValue(generator="SEQ_COURSES",strategy=GenerationType.SEQUENCE)  
  21.     @Column(name="ID")  
  22.     private Long id;  
  23.       
  24.     @Column(name="CODE")  
  25.     private String code;  
  26.     @Column(name="NAME")  
  27.     private String name;  
  28.     @ManyToMany(mappedBy="courses")  
  29.     private Set<Student> students;  
  30.       
  31.       
  32.     public Long getId() {  
  33.         return id;  
  34.     }  
  35.     public void setId(Long id) {  
  36.         this.id = id;  
  37.     }  
  38.     public String getCode() {  
  39.         return code;  
  40.     }  
  41.     public void setCode(String code) {  
  42.         this.code = code;  
  43.     }  
  44.     public String getName() {  
  45.         return name;  
  46.     }  
  47.     public void setName(String name) {  
  48.         this.name = name;  
  49.     }  
  50.     public Set<Student> getStudents() {  
  51.         return students;  
  52.     }  
  53.     public void setStudents(Set<Student> students) {  
  54.         this.students = students;  
  55.     }  
  56. }  


 

  1. package com.myHibernate.test;  
  2.   
  3. import java.util.HashSet;  
  4. import java.util.Set;  
  5.   
  6. import org.hibernate.Session;  
  7. import org.hibernate.SessionFactory;  
  8. import org.hibernate.Transaction;  
  9. import org.hibernate.cfg.AnnotationConfiguration;  
  10.   
  11. import com.myHibernate.vo.Course;  
  12. import com.myHibernate.vo.Student;  
  13.   
  14. public class ManyToManyTest {  
  15.   
  16.     /** 
  17.      * @param args 
  18.      */  
  19.     public static void main(String[] args) {  
  20.         SessionFactory sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();  
  21.         Session session = sessionFactory.openSession();  
  22.         Transaction trans = session.beginTransaction();  
  23.         Set<Student> sList = new HashSet<Student>();  
  24.         Student s0 = new Student();  
  25.         s0.setCode("000001");  
  26.         s0.setName("xioali");  
  27.         sList.add(s0);  
  28.         Student s1 = new Student();  
  29.         s1.setCode("000002");  
  30.         s1.setName("zhangsan");  
  31.         sList.add(s1);  
  32.         Set<Course> cList = new HashSet<Course>();  
  33.         Course c0 = new Course();  
  34.         c0.setCode("0001");  
  35.         c0.setName("语文");  
  36.         cList.add(c0);  
  37.         Course c1 = new Course();  
  38.         c1.setCode("0002");  
  39.         c1.setName("数学");  
  40.         cList.add(c1);  
  41.         s1.setCourses(cList);  
  42.         s0.setCourses(cList);  
  43.         session.save(s0);  
  44.         session.save(s1);  
  45.           
  46.           
  47.           
  48.           
  49. //      Student s = (Student)session.load(Student.class, 36L);  
  50.           
  51. //      String hql = "delete Course c from c where c.students.id = ?";  
  52. //      session.createQuery(hql).setLong(0, 36L).executeUpdate();  
  53.           
  54. //      Set<Course> courses = new HashSet<Course>();  
  55. //      Course c0 = (Course)session.load(Course.class, 7L);  
  56. //      Course c1 = (Course)session.load(Course.class, 8L);  
  57. //      courses.add(c0);  
  58. //      courses.add(c1);  
  59. //      s.setCourses(courses);  
  60. //      s.setCourses(null);  
  61. //      session.update(s);  
  62.         trans.commit();  
  63.   
  64.     }  
  65.   
  66. }  

要删除中间表的数据的代码如下:

  1. Student s = (Student)session.load(Student.class, 36L);  
  2.  s.setCourses(null);  
  3.         session.update(s);  


要恢复中间表中被删除的数据的代码如下:

  1. Student s = (Student)session.load(Student.class, 36L);  
  2. Set<Course> courses = new HashSet<Course>();  
  3.         Course c0 = (Course)session.load(Course.class, 7L);  
  4.         Course c1 = (Course)session.load(Course.class, 8L);  
  5.         courses.add(c0);  
  6.         courses.add(c1);  
  7. session.update(s); 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值