为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕侠2389804 2023-05-10 17:11:25
我有一个(供应商)和许多(客户)。我正在用三个新的客户对象更新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();
查看完整描述

1 回答

?
心有法竹

TA贡献1866条经验 获得超5个赞

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


查看完整回答
反对 回复 2023-05-10
  • 1 回答
  • 0 关注
  • 96 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信