【问题标题】:How should i perform update operation in one to many annotation based mapping on existing parent?我应该如何在现有父级的基于一对多注释的映射中执行更新操作?
【发布时间】:2019-08-02 06:34:45
【问题描述】:

我有一个(供应商)和许多(客户)。我正在使用三个新的客户对象更新数据库中具有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();

【问题讨论】:

    标签: java hibernate jpa annotations


    【解决方案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();
    

    【讨论】:

    • 但是这种方法用于多对一映射,如果我错了,请纠正我
    • 那么它的单向映射?你能添加实体的代码吗?
    • @Entity @Table(name = "Vendor") @Column(name = "vname", length=30) private String vendorName; @OneToMany(fetch=FetchType.EAGER, targetEntity=Customer.class, cascade=CascadeType.ALL) @JoinColumn(name = "venid", referencedColumnName="vid")
    • @Entity @Table(name = "Customers")@Id @Column(name = "custid") private int customerId; @Column(name = "custName", length=30) private String customerName;
    • 从xml切换到注解的更新操作流程有变化吗?
    猜你喜欢
    • 2012-06-26
    • 1970-01-01
    • 2015-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多