gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 02:12:40 24 4
gpt4 key购买 nike

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

2)为每个 child 设置父级。

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();

关于java - 我应该如何在现有父级上基于一对多注释的映射中执行更新操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57321098/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com