我有技能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);
}
答案 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,它将删除它并且条件因为开头的否定而变为假,否则它将添加它。