有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我有一个(供应商)和多个(客户)。我正在用三个新的客户对象更新数据库中有vid=101的父对象。问题是,在数据库中,这个vid=101与新创建的子对象关联,但对于旧的两个客户对象,它变为null。这个问题只出现在基于注释的代码中。使用基于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();

共 (1) 个答案

  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 ones
    
    session.saveOrUpdate(v);
    tx.commit();
    session.close();