我应该如何在现有父级上的一对多基于注释的映射中执行更新操作?

我有一个(供应商)和许多(客户)。我正在用三个新的客户对象更新vid=101数据库中的父对象。问题在于,在数据库中,这vid=101与新创建的子对象相关联,但对于旧的两个客户对象,它变为空。这个问题只会出现在基于注解的代码中。使用xml基于映射它的工作。


Session session = factory.openSession();

        Vendor v = (Vendor)session.get(Vendor.class, 100);



    Customer c1 = new Customer();

    c1.setCustomerId(502);

    c1.setCustomerName("Rajveer");


    Customer c2 = new Customer();

    c2.setCustomerId(503);

    c2.setCustomerName("Abhishek");


    Set s = new HashSet();

    s.add(c1);

    s.add(c2);

    s=v.getChildren();

    v.setChildren(s);

    Transaction tx = session.beginTransaction();

    s=v.getChildren();

    session.saveOrUpdate(v);

    tx.commit();

    session.close();


慕侠2389804
浏览 78回答 1
1回答

心有法竹

1)在一个事务中执行所有操作。2)为每个孩子设置父母。3)添加到获取的子列表中。您正在覆盖现有的Session session = factory.openSession();Transaction tx = session.beginTransaction();Vendor v = (Vendor)session.get(Vendor.class, 100);Customer c1 = new Customer();c1.setCustomerId(502);c1.setCustomerName("Rajveer");c1.setParent(v);Customer c2 = new Customer();c2.setCustomerId(503);c2.setCustomerName("Abhishek");c2.setParent(v);Set s = new HashSet();s.add(c1);s.add(c2);v.addChildren(s); // Add, not Set, unless you want to delete existing onessession.saveOrUpdate(v);tx.commit();session.close();
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java