Один из вариантов - использовать временное поле в клиенте, которое связано с заказом:
public class Order {
@Transient
private String customerId;
...
// setter/getter methods
}
Вот как будет использоваться значение на клиенте:
Order myOrder = new Order();
...
myOrder.setCustomID("1234");
rpcSave(myOrder);
Вот как значение будет использоваться на сервере:
if (order.getCustomerId() != null) {
Customer customer = // lookup customer by primary key
order.setCustomer(customer);
}
Эта логика позволяет клиенту создавать связь между заказом и клиентом, не требуя самого объекта Custom.Код сервера, с другой стороны, должен был бы выполнить поиск экземпляра Customer и добавить его в фактический заказ.
Проблема этого подхода заключается в том, что он добавляет атрибуты и методы к объекту Order, которые не всегда служат цели и усложняют выполнение кода.
Альтернативным подходом может быть изменениеоперация rpcSave для получения Order и customerId.Сервер будет искать Клиента на основе идентификатора и сам устанавливать связь.Тем самым экономя накладные расходы на передачу данных, сохраняя при этом простой объект заказа:
// client
Order myOrder = new Order();
...
rpcSave("1234", myOrder);
// server
Customer customer = // find customer by customerID;
newOrder.setCustomer(customer);
...
Надеюсь, это поможет.