Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
GWT+Hibernate+保存带宽_Hibernate_Gwt_Mapping - Fatal编程技术网

GWT+Hibernate+保存带宽

GWT+Hibernate+保存带宽,hibernate,gwt,mapping,Hibernate,Gwt,Mapping,我正在编写一个gwt应用程序,使用hibernate在服务器上保存 我有一个类似于客户->订单的概念。因此,如果我创建类customer和类orders,在数据库中,order表有一个指向customer表的外键 假设我想从服务器检索订单,而我不关心客户。如果我写了一些东西来减少订单,如果我使用“急切加载”,它会自动减少客户的订单。如果我不希望这样,那么我可以将其作为延迟加载,只获取订单,并且我假设myOrder.getCustomer==null 现在,如果我想在客户机上创建一个订单,有没有一

我正在编写一个gwt应用程序,使用hibernate在服务器上保存

我有一个类似于客户->订单的概念。因此,如果我创建类customer和类orders,在数据库中,order表有一个指向customer表的外键

假设我想从服务器检索订单,而我不关心客户。如果我写了一些东西来减少订单,如果我使用“急切加载”,它会自动减少客户的订单。如果我不希望这样,那么我可以将其作为延迟加载,只获取订单,并且我假设myOrder.getCustomer==null

现在,如果我想在客户机上创建一个订单,有没有一种方法可以在订单上设置customerid,然后将其传递给save,而不必传递customer对象。i、 e

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);
...
希望这有帮助