Список возврата‹Тип› с использованием предложения WHERE в Play Framework

Я хочу получить только записи (сохраненные с помощью Ebean), где виртуальный файл равен моему virtualfile_id

На маршруте http://localhost:9000/transactionRecords у меня есть пара записей:

[{"id":1,"virtualfile":"1","record_type":"D","transaction_type":"MA","card_number":"0000122000200123456","expiry_date":"0000"},
{"id":2,"virtualfile":"1","record_type":"D","transaction_type":"MA","card_number":"0000122000200123456","expiry_date":"0000"},
{"id":3,"virtualfile":"1","record_type":"D","transaction_type":"MA","card_number":"0000122000200123456","expiry_date":"0000"},
{"id":4,"virtualfile":"1","record_type":"D","transaction_type":"MA","card_number":"0000122000200123456","expiry_date":"0000"},
{"id":5,"virtualfile":"1","record_type":"D","transaction_type":"MA","card_number":"0000122000200123456","expiry_date":"0000"}]

Мой путь к GET их:

GET     /generator/:id             controllers.Application.generateFile(id: String)

Мой метод контроллера для их получения:

public Result generateFile(String virtualfile_id) {
    List<TransactionRecord> transactionRecords = TransactionRecord.find.where()
            .ilike("virtualfile", "1") //set to "1" for testing
            .orderBy("id asc")
            .findPagedList(1, 25)
            .getList();
    return ok(toJson(transactionRecords));
}

* метод получения списка, предложенный https://www.playframework.com/documentation/2.4.x/JavaEbean#Using-Model-superclass

И мой TransactionRecord.class

@Entity
public class TransactionRecord extends Model {

  @Id
  Long id;
  String virtualfile;
  String record_type;
  String transaction_type;
  String card_number;
  String expiry_date;

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

  public TransactionRecord(String virtualfile, String transaction_type, String card_number, String expiry_date) {
      this.virtualfile = virtualfile;
      this.record_type = "D";
      this.transaction_type = transaction_type;
      this.card_number = card_number;
      this.expiry_date = expiry_date;
  }

  getters & setters

}

Но мой вывод на маршруте http://localhost:9000/generator/1 пуст :( :

введите здесь описание изображения

ИЗМЕНИТЬ:

Если я только изменю .iLike на .eq, ничего не произойдет.

Результат замены .ilike на .eq и удаления .findPagedList:

введите здесь описание изображения


person Marcel    schedule 23.10.2015    source источник
comment
Что произойдет, если вы замените ilike на eq и/или удалите findPagedList?   -  person Steve Chaloner    schedule 23.10.2015
comment
@SteveChaloner Я обновил свой вопрос, указав результат.   -  person Marcel    schedule 23.10.2015
comment
Изменить getList на findList   -  person Steve Chaloner    schedule 23.10.2015
comment
Это работает @SteveChaloner, большое спасибо! :)   -  person Marcel    schedule 23.10.2015
comment
@SteveChaloner, пожалуйста, измените свой комментарий на ответ, чтобы его можно было принять и решить этот вопрос.   -  person Zoltán    schedule 23.10.2015
comment
@Zoltán только что сделал это для Стива   -  person Marcel    schedule 23.10.2015
comment
@SteveChaloner, вы можете скопировать мой пост и опубликовать его самостоятельно. Тогда я удалю свой ответ   -  person Marcel    schedule 23.10.2015
comment
@SteveChaloner, какой хороший счастливый конец :)   -  person Zoltán    schedule 23.10.2015


Ответы (1)


У вас есть пять записей, но при вызове getPagedList вы пропускаете первые 25 записей. Следовательно, вы пропускаете все свои записи.

Из документации Ebean.

Параметры: pageIndex — начинающийся с нуля индекс страницы. pageSize — количество бинов, возвращаемых на страницу.

Итак, изначально вам нужно изменить параметр findPagedList 1 на 0.

public Result generateFile(String virtualfile_id) {
    List<TransactionRecord> transactionRecords = TransactionRecord.find.where()
        .ilike("virtualfile", "1") //set to "1" for testing
        .orderBy("id asc")
        .findPagedList(0, 25)
        .getList();
    return ok(toJson(transactionRecords));
}

Для корректной поддержки пейджинга в соответствии с указаниями клиента (или, по крайней мере, исходя из уровня контроллера) вам необходимо изменить сигнатуру

public Result generateFile(String virtualfile_id)

to

public Result generateFile(String virtualfile_id, int page)

и используйте этот параметр page в качестве аргумента для findPagedList.

public Result generateFile(String virtualfile_id,
                           int page) {
    List<TransactionRecord> transactionRecords = TransactionRecord.find.where()
        .ilike("virtualfile", "1") //set to "1" for testing
        .order().asc("id")
        .findPagedList(page, 25)
        .getList();
    return ok(toJson(transactionRecords));
}
person Steve Chaloner    schedule 23.10.2015