0
1父实体可以具有0或多个懒惰子实体合并父和懒子收集列表
例如,有一种功能改变父母和孩子的实体状态列,而合并(父),父实体被更新,但子实体插入新的而不是更新。
这两个子实体的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您好,我刚更新了代码 –
http://www.programmingforfuture.com/2011/02/hibernate -merge-may-insert-new-record.html可能对你有所帮助 –