在java中添加和删除hashset中的对象

时间:2014-01-29 10:40:31

标签: java spring hibernate

我有技能pojo class.SkillsParts是一个数组字符串。使用技能部件我设置Skillsname.My问题是我第一次设置为null然后解析SkillsParts,Creating Skills new object&添加到设置,然后更新。但我想避免 这个如果它存在然后删除,如果不存在然后添加。

Pojo课程

package com.cloudcodes.gdirectory.pojo;

import java.io.Serializable;

public class Skills implements Serializable{

    private static final long serialVersionUID = 1L;
    private Long skillId;
    private String skillName;
    private String skillDesc;
    private Long categoryId;

    public Long getSkillId() {
        return skillId;
    }

    public void setSkillId(Long skillId) {
        this.skillId = skillId;
    }

    public String getSkillName() {
        return skillName;
    }

    public void setSkillName(String skillName) {
        this.skillName = skillName;
    }

    public String getSkillDesc() {
        return skillDesc;
    }

    public void setSkillDesc(String skillDesc) {
        this.skillDesc = skillDesc;
    }

    public Long getCategoryId() {
        return categoryId;
    }

    public void setCategoryId(Long categoryId) {
        this.categoryId = categoryId;
    }

}

这是我的关系表

@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.EAGER)
    private java.util.Set<Skills> skillsList = new HashSet<Skills>();

这是我的控制器

@RequestMapping(value="/ajax/saveSkills.htm")
        public  @ResponseBody String saveSkills(HttpServletRequest request,@RequestParam String skills,@RequestParam String Email) throws IOException
        {

            Domain domain1 = (Domain)request.getSession().getAttribute("Domain");
            Long domanId =domain1.getDomainId();
            String[] skillsParts = skills.split(",");
            UserProfile user = userProfileManager.getUserByEmail(domain1.getPrimary_Domain_Id(), Email);

                /* Here is problem  */
            Set<Skills> remove = new HashSet<Skills>();
            user.setSkillsList(remove);
            for(int i =0;i<skillsParts.length;i++){

                Skills skillObj = new Skills();
                skillObj.setSkillName(skillsParts[i]);
                user.getSkillsList().add(skillObj);

            }
            userProfileManager.update(user);
            Gson gson = new Gson();
            return gson.toJson(user);
        }

2 个答案:

答案 0 :(得分:0)

要实现您想要的效果,您需要将pojo Skills保留在表格中并为其定义equals()/hashCode()。据我所知,这里的业务关键是技能的名称,因此您需要检查的是什么。 Don't use the skillId!!

在控制器中,您需要通过名称询问Hibernate Skills而不是自己创建它们。如果Hibernate无法找到,请创建一个新的,持久化并将其添加到哈希。然后Hibernate会做正确的事。

答案 1 :(得分:0)

Set<Skills> remove = new HashSet<Skills>();
user.setSkillsList(remove);
除了在用户SkillList中设置一个空集之外,

实际上什么也没做。

for(int i =0;i<skillsParts.length;i++){

            Skills skillObj = new Skills();
            skillObj.setSkillName(skillsParts[i]);
            if(!user.getSkillsList().remove(skillObj)){ //1
              user.getSkillsList().add(skillObj);
            }
        }

user.getSkillsList()。remove(skillObj)将返回一个布尔值,具体取决于它是否已经存在。如果该集合具有skillObj,它将删除它并且条件因为开头的否定而变为假,否则它将添加它。