Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.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
Java 游戏框架2埃宾:为什么';无法获取相关对象?_Java_Playframework 2.0_Ebean - Fatal编程技术网

Java 游戏框架2埃宾:为什么';无法获取相关对象?

Java 游戏框架2埃宾:为什么';无法获取相关对象?,java,playframework-2.0,ebean,Java,Playframework 2.0,Ebean,这是我的用户: package models.user; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.Id; import javax.persistence.ManyToOne; import javax.persistence.Table; import play.data.val

这是我的
用户

package models.user;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

import play.data.validation.Constraints.MaxLength;
import play.data.validation.Constraints.MinLength;
import play.data.validation.Constraints.Required;
import play.db.ebean.Model;

@Entity
@Table(name = "T_USER")
public class User extends Model {
  @Id
  public Long id;

  @Required
  @MaxLength(30)
  @MinLength(4)
  public String username;

  @Required
  @MaxLength(30)
  @MinLength(4)
  public String password;

  @ManyToOne(fetch = FetchType.EAGER)
  @Column(nullable = false)
  public Role role;

  public static Finder<Long, User> find = new Finder<Long, User>(Long.class, User.class);

  public User() {
  }

  public User(String username, String password, Role role) {
    this.username = username;
    this.password = password;
    this.role = role;
  }

  @Override
  public String toString() {
    return "[Tying to login : ] [" + username + " - " + password + "]";
  }
}

问题是,
user.role.name
为空,但是
user.role.id
在这里是正确的,为什么EBean不帮助我为用户获取
role

我在不同的场合遇到过这个问题。您可以执行以下操作:

首先,尝试用私有字段替换公共字段,并添加适当的getter和setter(无论如何,在使用Java时,这是一个很好的模式)

其次,您可以编写一个查找/获取所需信息的小助手。假设您需要通过Id获取用户,并执行此字符串检查。然后在
User
类中,您可以编写如下方法:

public static User findById(Long id) {
    return Ebean.find(User.class)
        .fetch("role")
        .where() 
        .eq("id", id)
        .findUnique();
}
之后,只需使用以下方法:

public static Result modules(Long id) {
    User user = User.findById(id);
    if ("Super User".equalsIgnoreCase(user.getRole().getName())) {
      return ok();
    } else {
      return forbidden();
    }
  }
public static Result modules(Long id) {
    User user = User.findById(id);
    if ("Super User".equalsIgnoreCase(user.getRole().getName())) {
      return ok();
    } else {
      return forbidden();
    }
  }