【问题标题】:Merging parent and lazy child collection list合并父子集合列表和惰性子集合列表
【发布时间】: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


【解决方案1】:

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

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

public class Child extends Member implements Serializable{

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-23
    • 2021-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多