2016-09-20 8 views
0

1親エンティティは、例えば、0または複数の遅延子エンティティマージ親と遅延子のコレクションリスト

を有していてもよい(親)をマージしながら、親と子エンティティのステータス列を変更する機能は、親エンティティが、あります子エンティティは更新の代わりに新しく挿入されます。

子エンティティのID、データともに、デバッグ中のデータベースとまったく同じです。

親オブジェクトは@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{ 

子クラスを親(メンバー)に拡張すると、遅延読み込みに関連する必要な変更が反映されます。