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);
}
}
あなたのコードも入れてください。どのように試したのか正確な問題が分かると助かります。 –
@JekinKalariyaこんにちは私はコードで更新しました。 –
http://www.programmingforfuture.com/2011/02/hibernate -merge-may-insert-new-record.htmlあなたを助けるかもしれない –