[JPA 레벨 저장/레벨 삭제] @ OneToMany (쌍방 향) 한 쌍 이 많 습 니 다. 전 세계 가 깨끗 해 지고 레벨 삭제 가 불가능 합 니 다. 외부 키 가 연결 되 어 있 기 때 문 입 니 다.

6093 단어 jpa


http://blog.sina.com.cn/s/blog_6826662b01016ylz.html

           【JPA】 @OneToOne      【JPA】@OneToOne                        。           JPA       。    ,            ,                  。   :【JPA】         @Cascade
          ,           。School(  )  Studnet(  )               。    ,     。      ,        。   ,                 。   ,      ,               。  ,        ,                      。


--------<     >----------------------------------------------------------------------------------------------------------


//  Model ,             。    ,         ," "   ,          。
@Entity
@Table(name = "student")
public class Student {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;


    //        "school_fk"
    
    @ManyToOne
    @JoinColumn(name="school_fk")
    private School school;
   
//    get / set
}




@Entity
@Table(name = "school")
public class School {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;


    @OneToMany(mappedBy="shcool")
    //   :     /      。           ,                    
    @Column(cascade={CascadeType.PERSIST})
    private List students;


    //           
    public void addStudent(Strudent stu){
            if(stu != null){
                 students.add(stu);
            }
    }


//    get / set
}
-----------------------------------------------------<      >--------------------------------------------------------------
public class Test(){


    public void testCreate(){
         School school = new School();
         school.setName("  ");


         Student st1 = new Student();
         st1.setName("  ");
         st1.setSchool(school);
         studnetDAO.save(st1);
       
         Student st2 = new Student();
         st2.setName("  ");
         st2.setSchool(school);
         studnetDAO.save(st2);


         //    
         school.addStudent(st1);
         school.addStudent(st2);
         schoolDAO.save(school);
        //                。           ,      。
        //    JPA   ,     ,       。               ,    ,           。
    }


    //    ,    
    public void testPersistCreateSchool(){
            //      :     (School)Model            :cascade={CascadeType.PERSIST}
       
         School school = new School();
         school.setName("  ");


         Student st1 = new Student();
         st1.setName("  ");
         st1.setSchool(school);
         //            st1
         //studnetDAO.save(st1); 
       
         Student st2 = new Student();
         st2.setName("  ");
         st2.setSchool(school);
         //            st2
         //studnetDAO.save(st2);


         //    
         school.addStudent(st1);
         school.addStudent(st2);
         schoolDAO.save(school);//     ,         [st1、st2]    。(    )
    }


    //    
    public void testDeleteSchool(){
            //     ,    。
            testCreate();
            schoolDAO.delete(school);//    
            //avax.persistence.RollbackException: Error while commiting the transaction Caused by: java.sql.BatchUpdateException: Cannot delete or update a parent row: a foreign key constraint...
              
             //        ,           ,           。      。         ,     ,    。
    
        List<Strudnet> students = school.getStudentList();
        for(int i=0;i<students.size();i++){
                Student stu = students.get(i);
                stu.setSchool(null);//           
        }
        schoolDAO.delete(school);//  ,         。                  。  ,         。


        //    ,       。JPA      ?        ?      ?
        //         ,         ,       ?!
        //  ,             。  ,                     。  ,   ,           。  ,       JPA     。
        //     Model  ,     ()   :@Column(cascade={CascadeType.PERSIST})
        //  :@Column(cascade={CascadeType.PERSIST,CascadeType.REMOVE})         。  ,                  。
        schoolDAO.delete(school);//  ,         。  ,      ,        。
        Stduent stu = studentDAO.findByName(  ");
        //      : null     ,    。              ...
        //  ,    JPA          。         。         。  ,    Model              ,        ,                。
        //  ,   ,     。          。  ,        。       ,         ,         。
}
       
        //    
        public void testDeleteStudent(){
        //       
        testCreate();
        studentDAO.delete(st1);//  ,st1(   ,   “  ”   )           。  ,           。   ,st1               。    JPA    。


        //  ,    :          。st1     。          。
        // ,Stuent Model           。@JoinColumn(name="school_fk",cascade={CascadeType.REMOVE})     ,School   Model           。
        //  ,    ,              。
        studentDAO.delete(st1);
        // ,       。           。    ,        。       ?
        //      JPA     :
        1:   st1
        2:school   st1     
        3:st2   school     
        //  ,     ,             。  ,    ,                   。             。
       //      ,      。       ,              。       Model    ,                 。          。        ,      ,      。  ,     CascadeType.ALL       ,            。


       }
//  main   
}



좋은 웹페이지 즐겨찾기