最近我开始使用Play framework 2.3.8。
然而,模型更新无法正常工作。
顺便说一句,save方法有效。
更新不适用于以下代码。 (它不会持久存储到数据库中。)
User user = User.findByEmail(email);
user.remoteAddress = remoteAddress;
user.userAgent = userAgent;
user.latitude = latitude;
user.longitude = longitude;
user.lastLoginAt = new Date();
user.update();
但是,以下代码将按预期工作。
User newUser = new User();
newUser.id = user.id;
newUser.remoteAddress = remoteAddress;
newUser.userAgent = userAgent;
newUser.latitude = latitude;
newUser.longitude = longitude;
newUser.lastLoginAt = new Date();
newUser.update();
为什么我无法更新原始实例?
用户类如下。
package models.entities;
import java.util.*;
import javax.persistence.*;
import com.avaje.ebean.annotation.*;
import play.db.ebean.*;
import play.db.ebean.Model.Finder;
import play.data.validation.Constraints.*;
import play.Logger;
import models.services.*;
/**
* @author satouf
*/
@Entity
@Table(name="user")
public class User extends Model {
@Id
public Long id;
@Column(nullable = false, columnDefinition = "varchar(32)")
public String userIdentifier;
@Column(nullable = false, columnDefinition = "varchar(255)")
public String loginId;
@Column(columnDefinition = "text")
public String loginPassword;
@Column(columnDefinition = "varchar(64)")
public String handleName;
@Email
@Column(nullable = false, columnDefinition = "varchar(255)")
public String email;
@Column(nullable = false, columnDefinition = "smallint default 0")
public short status;
@Column(columnDefinition = "varchar(64)")
public String lastRemoteAddress;
public String lastUserAgent;
public Date lastLoginAt;
public double latitude;
public double longitude;
@UpdatedTimestamp
public Date updatedAt;
@CreatedTimestamp
public Date createdAt;
public static Finder<Long, User> finder = new Finder<Long, User>(Long.class, User.class);
@Override
public String toString(){
return ("[id: " + id + ", userIdentifier: " + userIdentifier + ", loginId: " + loginId + ", handleName: "
+ handleName + ", latitude: " + latitude + ", longitude: " + longitude + "]");
}
}
答案 0 :(得分:17)
由于某些奇怪的原因,对ebean更新的成员直接访问失败。
添加setter,例如:
private setUserAgent(String val) {
this.userAgent = val;
}
并致电:
user.setUserAgent(your_val);
user.update();
答案 1 :(得分:2)
执行完整重建。 当您拥有现有的Model类(如User)并添加新字段时,就会出现此问题。如果不清除编译, PlayEnhancer 将不会为新字段生成setter / getter,因此无法进行更新。 一个干净的编译将成功。 更多信息:https://www.playframework.com/documentation/2.6.x/PlayEnhancer
答案 2 :(得分:1)
清理并重新编译
这是因为你遇到了bean属性没有更新的问题。
答案 3 :(得分:0)
对于更新对象,将ID添加为update
方法的参数,即:
user.update(user.id);
用于创建ne对象的使用不带param的save()
方法:
newUser.save();