我对持久性提供程序 eclipselink 也有类似的问题。我需要将具有临时“客户端 orderID”的客户端数据库中的新订单添加到服务器数据库中的现有客户。因为我需要“服务器 orderIDs”来处理进一步的客户端请求,所以我想创建一个映射(clientID、serverID)并将其发送回客户端。基本上我的方法是获取对新添加的子订单副本的引用。它将始终添加到父类客户列表的末尾,该事实用于检索它。
我使用实体类 Customer 和 Order,其中 Customer 有一个订单列表 (LinkedList)。
父客户类:...
@OneToMany(mappedBy = "customer", cascade=CascadeType.ALL, orphanRemoval = true)
private List<Order> orders = new LinkedList<Order>();
public Order getLastOrder() {
return orders.get(orders.size()-1);
}
子订单类:
@ManyToOne(optional=false)
private Customer customer;
小服务程序:
Customer customer = customerService.findByID(customerID); //existing customer
Order order = new Order();
//add attributes to new order
customer.addOrder(order);
customerService.update(customer); //generates keys for children
order = customer.getLastOrder();
Long orderID = order.getID; //Nullpointer exception
CustomerService 使用 EntityManager.merge 更新客户,但我忘记更新 servlet 中的引用:
客户服务类:
public void update(Customer entity) {
entityManager.merge(entity);
}
我这样解决了: CustomerService 类:
public Customer update(Customer entity) {
return entityManager.merge(entity);
}
小服务程序:....
customer = customerService.update(customer); //generates keys for children
现在一切正常。