User.java    /** * @return roles. */
    @ManyToMany(cascade = { CascadeType.PERSIST, CascadeType.MERGE }, fetch = FetchType.LAZY)
    @JoinTable(name = "tb_user_role", joinColumns = { @JoinColumn(name = "USER_ID") }, inverseJoinColumns = { @JoinColumn(name = "ROLE_ID") })
    public Set<Role> getRoles() {
        return roles;
    }
为什么修改user对象的之后,会级联删除关联的role对象啊 ,,搞不懂啊!!!!!!!!!!!!!!!!

解决方案 »

  1.   

    表是hibernate生成的,还是你自己建的?如果是自动生成的,那你要修改别的外键属性了。
      

  2.   

    因为有ManyToMany这个关系,
    在你保存user时,你user对象中roles为空,所以hibernate就以为你要删除这个user的roles
    个人觉得这个ManyToMany关系你可以不用加,需要的时候查出来就是了。
      

  3.   

    试了好几次 还是这样 ,,依然会删除 roles  
      

  4.   

    目测不了,我猜(是有这种情况的),你在修改user的时候,没有把user里面的roles对象是空的,所以你保存,roles表会清空,这是必然的。你高度一下,看你修改的controller里面,得到的那个user对象,里面的roles属性,是不是空的。如果不是,再回复我
      

  5.   

    打错了, 再来遍目测不了,我猜(是有这种情况的),你在修改user的时候,user里面的roles对象是空的,所以你保存,roles表会清空,这是必然的。你调试一下,看你修改的controller里面,得到的那个user对象,里面的roles属性,是不是空的。如果不是,再回复我
      

  6.   

     这样配置显然是无压力的。你试试在得到这个users对象之后,再List<Role> roles = user.getRoles(); system.out.println(roles.get(0).get...);看是不是懒查询了
      

  7.   

    我知道原因了,跟配置没有关系,,因为我在修改页面,获取user对象的时候仅仅只是获取了页面上传递过来的文本框参数,而把user拥有的roles丢弃了(user.getRoles()为空),所以hibernate认为是我想要删除roles就级联删除掉了。。
      

  8.   

    嗯嗯 ,thanks 忘记结贴了