我应该如何在现有父级上的一对多基于注释的映射中执行更新操作?
How should i perform update operation in one to many annotation based mapping on existing parent?
我有一个(供应商)和许多(客户)。我正在用三个新客户对象更新数据库中具有 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)在一个事务中执行所有操作。
2) 为每个 child 设置 parent。
3) 添加到获取的 child 列表。您正在覆盖现有的
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();
我有一个(供应商)和许多(客户)。我正在用三个新客户对象更新数据库中具有 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)在一个事务中执行所有操作。
2) 为每个 child 设置 parent。
3) 添加到获取的 child 列表。您正在覆盖现有的
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();