hibernate user对象中有个roles集合属性,我在roles中新增一条对象,日志显示删除集合全部对象,再全部新增,而我只想不删除并且新增一条hibernate

解决方案 »

  1.   

    数据库有3个表,acct_user,acct_user_role(中间表,外键在这声明),acct_role 
    user实体中有 
    //多对多定义 
    @ManyToMany 
    //中间表定义,表名采用默认命名规则 
    @JoinTable(name = "ACCT_USER_ROLE", joinColumns = { @JoinColumn(name = "USER_ID") }, inverseJoinColumns = { @JoinColumn(name = "ROLE_ID") }) 
    //Fecth策略定义 
    @Fetch(FetchMode.SUBSELECT) 
    //集合按id排序. 
    @OrderBy("id") 
    //集合中对象id的缓存. 
    @Cache(usage = CacheConcurrencyStrategy.READ_WRITE) 
    @Cascade(value={CascadeType.MERGE}) 
    public List<Role> getRoleList() { 
    return roleList; 
    } 现在我调用: 
    User user = userDao.findByUsername(SpringSecurityUtils.getCurrentUserName()); 
    List<Role> roles = user.getRoleList(); 
    Role role1 = new Role(); 
    role1.setName("管理员" + new Date()); 
    roles.add(role1); 
    user.setRoleList(roles); 
    userDao.save(user); hibernate打印出来的语句是: Hibernate: 
        delete 
        from 
            acct_user_role 
        where 
            user_id=? 
    Hibernate: 
        insert 
        into 
            acct_user_role 
            (user_id, role_id) 
        values 
            (?, ?) 
    Hibernate: 
        insert 
        into 
            acct_user_role 
            (user_id, role_id) 
        values 
            (?, ?) 
    Hibernate: 
        insert 
        into 
            acct_user_role 
            (user_id, role_id) 
        values 
            (?, ?) 
    Hibernate: 
        insert 
        into 
            acct_user_role 
            (user_id, role_id) 
        values 
            (?, ?) 
    Hibernate: 
        insert 
        into 
            acct_user_role 
            (user_id, role_id) 
        values 
            (?, ?) 但是我想只插入一条,而不是全删除再全插入
      

  2.   


    只需要修改user对象,为什么调用save方法呢