解决方案 »

  1.   

    那就把除了CascadeType.DELETE之外的都写上……
      

  2.   

    private Set<Course> courses = new HashSet<Course>();
    private Set<Student> students = new HashSet<Student>();试试看我也是猜的
      

  3.   

    s1.setCourses(new HashSet<Course>()); 你关联了个空的 怎么会级联呢
      

  4.   

    既然是student为关系维护段,为什么在你的课程又有这么一段code 呢c2.setStudents(new HashSet<Student>());?这样写:
    Student s1 = new Student();
     .....
          
    Course c2= new Course();
    ...
    Course c2= new Course();
    ...
    HashSet set = new HashSet<Course>()
    set.add...  s1.setCourses(set);
      

  5.   

    你都没把student往set里面放,怎么级联保存new Course().getStudents.add(new Student())
      

  6.   


    大哥,你没有认真读代码啊。
    我后面不是写了么:
    s1.getCourses().add(c1);            
    s1.getCourses().add(c2);这样写集合还是空的?
      

  7.   


    大哥,你没有认真读代码啊。
     我后面不是写了么:
     s1.getCourses().add(c1);            
     s1.getCourses().add(c2);
     
    这不放进去了么~
      

  8.   

    貌似用JPA的CascadeType注解对save方法无效。可以用Hibernate的注解 @Cascade(value = org.hibernate.annotations.CascadeType.SAVE_UPDATE)
      

  9.   

    问题解决了吗 我遇到了 楼主同样的问题?
    希望级联更新和添加 但是不希望级联删除
    @ManyToMany(cascade={CascadeType.PERSIST,CascadeType.REFRESH},fetch=FetchType.EAGER)
    这样配死活添加不上
      

  10.   

    同遇到问题,完美解决了,留下脚印希望能给后者帮助:
    解:@OneToMany(cascade = {CascadeType.PERSIST}),发现级联不起作用,如果更改为Hibernate的注解 @Cascade({org.hibernate.annotations.CascadeType.PERSIST}),依然不起作用,但改为 @Cascade({org.hibernate.annotations.CascadeType.SAVE_UPDATE})之后,注解生效。
    原因如下:
    如果使用javax.persistence.*里面的注解,只有调用相应的方法才生效,如PERSIST,只有调用persist方法才生效,Hibernate的注解也是如此。
    查看我的代码,我保存对象用的是save方法,因此要用SAVE_UPDATE,级联才能生效。2、使用方法
    如果在ManyToOne的一端使用,如下(Vote类):
    @ManyToOne
        @Cascade({CascadeType.SAVE_UPDATE})
        private VoteSubject voteSubject;那么在保存该Vote对象时,如果对象的voteSubject属性是一个新对象,则会在保存Vote对象时,顺便把voteSubject对象保存;反之,如果one2Many的一端如果没有设置关联,则one的一端保存时,不会保存集合中的新对象。也就是说在哪个对象中的相应属性中设置了级联,那么在操作该对象时级联生效。
    如果想让有关系的双方同时级联生效,那么级联要在两个对象中同时设置。