GWT+Hibernate+保存带宽
我正在编写一个gwt应用程序,使用hibernate在服务器上保存 我有一个类似于客户->订单的概念。因此,如果我创建类customer和类orders,在数据库中,order表有一个指向customer表的外键 假设我想从服务器检索订单,而我不关心客户。如果我写了一些东西来减少订单,如果我使用“急切加载”,它会自动减少客户的订单。如果我不希望这样,那么我可以将其作为延迟加载,只获取订单,并且我假设myOrder.getCustomer==null 现在,如果我想在客户机上创建一个订单,有没有一种方法可以在订单上设置customerid,然后将其传递给save,而不必传递customer对象。i、 eGWT+Hibernate+保存带宽,hibernate,gwt,mapping,Hibernate,Gwt,Mapping,我正在编写一个gwt应用程序,使用hibernate在服务器上保存 我有一个类似于客户->订单的概念。因此,如果我创建类customer和类orders,在数据库中,order表有一个指向customer表的外键 假设我想从服务器检索订单,而我不关心客户。如果我写了一些东西来减少订单,如果我使用“急切加载”,它会自动减少客户的订单。如果我不希望这样,那么我可以将其作为延迟加载,只获取订单,并且我假设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一个选项是在客户中使用链接到订单的临时字段:
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);
}
此逻辑允许客户端创建订单和客户之间的链接,而不需要自定义对象本身。另一方面,服务器代码的任务是查找客户实例并将其添加到实际订单中
这种方法的问题在于,它向Order对象添加了属性和方法,这些属性和方法并不总是起作用,并且使代码更难理解
另一种方法是将rpcSave操作更改为接受订单和customerId。服务器将根据id查找客户,并自行建立关联。从而节省了数据传输的开销,同时使您的订单对象保持简单:
// client
Order myOrder = new Order();
...
rpcSave("1234", myOrder);
// server
Customer customer = // find customer by customerID;
newOrder.setCustomer(customer);
...
希望这有帮助