GWT + Hibernate + сохранение пропускной способности - PullRequest
1 голос
/ 18 февраля 2011

Я пишу приложение gwt, используя hibernate для сохранения на сервере.

У меня есть концепция, подобная клиенту -> заказы. Поэтому, если я создаю класс customer и класс заказов в базе данных, таблица заказов имеет внешний ключ к таблице customer.

Скажем, я хотел получить заказы с сервера, и мне наплевать на клиента. Если я напишу что-нибудь, чтобы отменить заказы, это автоматически обрушит клиента, если я использую загрузку EAGER. Если я этого не хочу, я могу оставить это как ленивую загрузку и просто получить заказы, и я предполагаю, что myOrder.getCustomer () == null.

Теперь, если бы я хотел создать заказ на клиенте, есть ли способ установить клиентский заказ на заказ, а затем передать его для сохранения без необходимости передавать объект клиента вместе с ним. т.е.

Order myOrder = new Order();
.
.
.
myOrder.setCustomerID("1234");
rpcSave(myOrder);

Или это единственный вариант, который у меня есть

Customer me = new Customer()
Order myOrder = new Order()
.
.
.
myOrder.setCustomer(me);
rpcSave(myOrder);

Спасибо

Nadin

1 Ответ

0 голосов
/ 18 февраля 2011

Один из вариантов - использовать временное поле в клиенте, которое связано с заказом:

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

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...