postgresql - Play Framework EBean 获取具有关系的对象

标签 postgresql playframework ebean

我正在尝试获取一个Question及其所有Answers

问题

@Entity
public class Question extends Model {
  @Id
  public Long id;

  @Constraints.Required
  @OneToMany(cascade = CascadeType.ALL)
  public ArrayList<Answer> answers = new ArrayList<>(4);
  ...
}

回答

@Entity
public class Answer extends Model{
  @Id
  public Long id;

  @ManyToOne
  public Question question;
  ...
}

查询

public static Result getQuestion() {
    return ok(
        Json.toJson(Question.find
        .fetch("answers")
        .orderBy("question.id")
        .setMaxRows(1)
        .findList()
        .get(0)
        )
    );
}

fetch("answers") 抛出一个 Nullpointerexception

数据库表questionanswer 是一致的。表 answer 包含 question 表的正确外键。

堆栈跟踪

play.api.Application$$anon$1: Execution exception[[NullPointerException: null]]
at play.api.Application$class.handleError(Application.scala:296) ~[play_2.11-2.3.8.jar:2.3.8]
at play.api.DefaultApplication.handleError(Application.scala:402) [play_2.11-2.3.8.jar:2.3.8]
at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$3$$anonfun$applyOrElse$4.apply(PlayDefaultUpstreamHandler.scala:320) [play_2.11-2.3.8.jar:2.3.8]
at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$3$$anonfun$applyOrElse$4.apply(PlayDefaultUpstreamHandler.scala:320) [play_2.11-2.3.8.jar:2.3.8]
at scala.Option.map(Option.scala:145) [scala-library-2.11.1.jar:na]
Caused by: java.lang.NullPointerException: null
at com.avaje.ebeaninternal.server.deploy.BeanDescriptor.getBeanDescriptor(BeanDescriptor.java:1411) ~[avaje-ebeanorm-3.3.4.jar:na]
at com.avaje.ebeaninternal.server.querydefn.OrmQueryDetail.setDefaultSelectClause(OrmQueryDetail.java:414) ~[avaje-ebeanorm-3.3.4.jar:na]
at com.avaje.ebeaninternal.server.querydefn.DefaultOrmQuery.setDefaultSelectClause(DefaultOrmQuery.java:842) ~[avaje-ebeanorm-3.3.4.jar:na]
at com.avaje.ebeaninternal.server.core.DefaultServer.createQueryRequest(DefaultServer.java:1105) ~[avaje-ebeanorm-3.3.4.jar:na]
at com.avaje.ebeaninternal.server.core.DefaultServer.createQueryRequest(DefaultServer.java:1093) ~[avaje-ebeanorm-3.3.4.jar:na]

最佳答案

可以查询不为空的“answer”

这应该可行

Question.find.fetch("answers").where().isNotNull("answers");

这可能有用

Question.find.fetch("answers").where().ne("answers.id", null);

关于postgresql - Play Framework EBean 获取具有关系的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29672566/

相关文章:

SQL - 在连接表上查询

sql - Ecto 查询 - 日期 + Postgres 间隔 + 查询插值

java - 无法在 Play 2 中使用多个 ebean 数据库

scala - InvalidActorNameException - Actor 名称 {name} 不是唯一的

java - 如何将列表/字符串生成器渲染到模板

java - play框架2.4 ebean [PersistenceException : Property [] not found on models. SearchContent]

mysql - 仅使用 2 个模型对象设置 play 2.0 标记?

sql - 如果表中的下一条记录与特定字段中的值相同,如何删除一条记录

database - 由于 1 个数据库上的锁定问题,具有多个数据库的 Postgres 实例是否会在多个/所有数据库之间被阻止?

scala - Play 框架的 Stripe Webhook 验证错误