2014-01-29 60 views
0

我有技能的POJO class.SkillsParts是array.Using skillsParts的字符串我是设置Skillsname.My问题是,我第一次设置为空,然后解析SkillsParts,创作手法的新对象&添加它来设置,然后update.But我想避免 这如果存在然后删除,如果不存在,则添加。从HashSet的在java中添加和删除对象

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); 
     } 
+0

你能重构你的最后一行吗?目前还不清楚你想达到什么目的。如果SkillsList是一个Set,它将始终有唯一的值。 – Edge

+0

是爵士它含有独特的value.i想用getSkillsList方法获取先前的值,然后检查使用skillsParts字符串Array.If skillsParts值出现在前面的列表然后将其删除如果没有的话在以前的列表中添加... –

+0

尝试的解决方案下面......看看这你的意思做,虽然我不是很清楚为什么你会想这样做 – Edge

回答

0

达到你想要什么,你需要坚持的POJO Skills在一张桌子,并为其定义equals()/hashCode()。据我所知,这里的商业关键是技能的名称,所以这就是你需要检查的。 Don't use the skillId!!

在控制器中,您需要通过名称向Hibernate索取Skills,而不是自己创建它们。如果Hibernate找不到一个,请创建一个新的,保存并将其添加到散列。然后Hibernate会做正确的事情。

+0

先生,我加入上面的代码,但我得到的例外java.util.ConcurrentModificationException –

+0

后的新代码。 –

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()。删除(skillObj)将根据事实,返回一个布尔值,如果它已经存在。如果集合具有skillObj,它将移除它,并且由于一开始的否定,条件将变为假,否则它将添加它。

+0

先生,我取出空集code..But我已经保存button.Sir我想只有那些条目是存在于以前的列表和新entry..for skillsParts将在SkillsList.So我该怎么办this..I尝试乌尔代码,但重复的条目中找到了.. –

+0

中集没有重复存储,但我Skillsid是自动生成 –

+0

@RaviChothe定义的散列码,并在技能等级equals方法。确保Skillsid不是这两个函数的一部分。 – Edge