2016-09-20 42 views
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); 
     } 

    } 
+0

把你的代码也一样,所以它会有助于理解你是如何尝试和确切的问题是什么 –

+0

@JekinKalariya您好,我刚更新了代码 –

+0

http://www.programmingforfuture.com/2011/02/hibernate -merge-may-insert-new-record.html可能对你有所帮助 –

回答

0

我不能看到你的快照代码中的任何父子关系

请用下面的代码修改子类的代码来创建继承关系。

public class Child extends Member implements Serializable{ 

将Child类扩展到Parent(Member)将反映与延迟加载相关的所需更改。