Java Play framework在保存前检索同一对象的旧记录
查看:Java Play framework在保存前检索同一对象的旧记录,java,database,playframework,record,playframework-1.x,Java,Database,Playframework,Record,Playframework 1.x,查看: #{form @UserController.editUser()} <input type="hidden" value=${user?.id} name="user.id"> #{input key:'user.instructions', label: 'Instructions', value: user?.instructions /} //// Assume the value of the instructions i
#{form @UserController.editUser()}
<input type="hidden" value=${user?.id} name="user.id">
#{input key:'user.instructions', label: 'Instructions', value: user?.instructions /}
//// Assume the value of the instructions is "Old" (currently in the database) and the user changes it in the view to "New" using the input box
***(input is a tag I created.)***
<div class="form-actions">
<button id="save" type="submit" class="btn btn-primary" name="event" value="update">
<i class="icon-save"></i> Save
</button>
</div>
#{/form}
public static void editUser(User user) {
User old = User.findById(user.id);
/// Right here I need the old record before i edit it. How do i get the old value? That is, i need record with user.instructions = "Old". I always get the record where user.instructions = "New" even though it is not saved in the database
user.save();
}
我认为这是因为,在提交表格后,播放!frameworkjpa对象绑定对内存中的数据(不是数据库中的数据,因为它尚未被持久化)进行更改 我尝试过此代码,它对我有效:)要解决此问题,您的
editUser
控制器操作可能如下所示:
public static void editUser(User user) {
JPA.em().detach(user); // detach framework managed user object
User old = User.findById(user.id); // get old value from database (get original data)
// in this scope, "old" variable has same value as in database
...
user = JPA.em().merge(user); // tell framework to manage user object again and reassign variable reference
user.save(); // persist change to database
}
这篇文章可以作为很好的参考: