2014-01-29 96 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