bean的更新方法在play框架中不起作用

时间:2015-03-07 14:29:43

标签: java ebean playframework-2.3

最近我开始使用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 + "]");
  }

}

4 个答案:

答案 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();