【发布时间】:2017-01-28 02:45:26
【问题描述】:
1 个父实体可能有 0 个或多个惰性子实体
比如有一个函数改变父子实体的status列,而merge(parent),父实体更新,子实体insert new而不是update。
调试时,两个子实体的id、数据与数据库中的完全相同。
父对象放在spring控制器的@SessionAttributes中,会是这个原因吗?
即使我只合并子列表,merge(childList),它也会创建新记录而不是更新。
@Entity
@Table(name = "member")
public class Member implements Serializable{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="id")
private int id;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "memberParent", cascade = CascadeType.ALL)
public List<Child> ChildList
getter setter......
}
@Entity
@Table(name = "child")
public class Child implements Serializable{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="id")
private int id;
@Column(name="member_id")
private int mem_id;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumns({
@JoinColumn(name = "member_id", referencedColumnName = "id", insertable = false, updatable = false)
})
public Member memberParent;
getter setter......
}
//Controller
@SessionAttributes({"member"})
public class Appcontroller {
@Transactional
@RequestMapping(value = {"/update-member/{id}"}, method = RequestMethod.GET)
public String viewEditRepresetative(ModelMap model, @PathVariable ind id) {
Member member = memberService.find(id);
model.addAttributes("member", member);
}
@Transactional
@RequestMapping(value = {"/update-member"}, method = RequestMethod.POST)
public String viewEditRepresetative(ModelMap model, HttpServletRequest reques, @Valid @ModelAttribute("member") Member member, BindingResult result,
RedirectAttributes redirectAttributes, SessionStatus status) {
if (!result.hasErrors()) {
memberService.merge(member);
}
}
【问题讨论】:
-
同时输入您的代码,这样有助于了解您的尝试方式以及确切的问题是什么
-
@JekinKalariya 嗨,我刚刚更新了代码
-
我尝试了解决方案但不成功,但我发现在我设置之前Id已经存在
标签: java spring hibernate spring-mvc merge