2012-02-22 27 views
0

在API文档为play.db.jpa.Model,对于方法refresh()的描述给定为“Refresh the entity state.” ..什么呢在playframework model.refresh做(1.2.4)

在文档jpa,下面的片段上面给出

public static void save(Long id) { 
    User user = User.findById(id); 
    user.edit("user", params.all()); 
    validation.valid(user); 
    if(validation.hasErrors()) { 
     // Here we have to explicitly discard the user modifications... 
     user.refresh(); 
     edit(id); 
    } 
    show(id); 
} 

在段落中,它被赋予

我们必须告诉其对象不更新的EntityManager。我们通过调用refresh()来实现这个 ,这基本上回滚了一个实体。我们 在调用事务提交之前或当我们 意识到对象不应该更新时,会这样做。

读取api文档的方法,我明白了,通过调用refresh(),模型状态将被设置为数据库中的内容。

但是看完这些片段/款,我越来越糊涂..

有人能告诉我什么刷新()呢?

我编写的应用程序一样,

... 
Order lastOdr = Order.find("some query to find the last pending order..").first(); 
if(lastOdr!=null) { 
    lastOdr.refresh(); 
} 
... 

这是错的,我想通过执行该查询从数据库获取订单的对象..

回答

1

在该代码片段:

user.edit("user", params.all()); 

将使用http请求参数填充实体,该参数的名称以“user”开头,如果请求有一个名为“user.firstName”的参数,则该值将用于填充用户模型的firstName字段。

user.refresh(); 

被调用时validation.hasErrors(),这意味着它将使用当前数据库值填充用户模型,并丢弃未来的形式user.edit("user", params.all());所有更改。不过,我认为不需要此声明,因为Play will not commit the changes unless您明确地呼叫user.save()

无需调用refresh()在你的代码,像你刚才从数据库中获取它的状态应该是相同的,因为它是在数据库