Play Framework EBean fetch Object с отношениями

Я пытаюсь получить 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.

Таблицы базы данных question и answer согласованы. Таблица answer включает правильные внешние ключи для таблицы question.

Stacktrace

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]

person Martin Golpashin    schedule 16.04.2015    source источник
comment
Можете ли вы опубликовать свою трассировку стека?   -  person sebster    schedule 16.04.2015
comment
обновленный вопрос @sebster   -  person Martin Golpashin    schedule 16.04.2015


Ответы (2)


Вы можете запросить "ответ", который не равен нулю.

Это должно работать

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

Это может сработать

Question.find.fetch("answers").where().ne("answers.id", null);
person runcode    schedule 17.04.2015

Проблема заключалась в этой строке в классе Question:

public ArrayList<Answer> answers = new ArrayList<>(4);

В Play Framework необходимо использовать интерфейс списка вместо реализации:

public List<Answer> answers = new ArrayList<>(4);
person Martin Golpashin    schedule 20.04.2015