嘿伙计们, 我有使用Play Framework的问题。 我正在尝试显示大量数据(来自此数据库)。当我使用" find.all()" Play Framework Server崩溃了,因为它占用了大量内存。
我有一个名为的数据库模型:
@Entity
public class dblp_pub_new extends Model {
[...]
public dblp_pub_new() {}
public static List<dblp_pub_new> all() {
return find.all();
}
public String getDoi() {
return doi;
}
public void setMdate() {
this.mdate = new Date();
}
public static Finder<String,dblp_pub_new> find = new Finder<String, dblp_pub_new>(String.class, dblp_pub_new.class);
}
我的渲染函数是,它包含在Application.java中:
public static Result dois(){
return ok(views.html.index.render(dblp_pub_new.all(), DoiForm));
}
我试图将all()查询限制为50(最好是每页)。但我似乎无法弄明白。我想我需要一个List返回显示在网页上。但我无法让它发挥作用。 如果你们中的一个(和女孩)可以帮助我解决这个问题,我会真的很放心。 我已经尝试过&#34; fetch&#34;和&#34; setMaxRows()&#34;但我只能得到我似乎无法解决的错误。 如果有不清楚的地方,请问我,我会尝试提供尽可能多的信息。 谢谢。
答案 0 :(得分:6)
使用setMaxRows()
应该有效。试试这个:
dblp_pub_new.find.setMaxRows(50).findList()
顺便说一句,您应该根据Java约定命名您的类:DblpPubNew
。它将使您的代码更易于阅读。
答案 1 :(得分:5)
Ebean有助于简化数据分页。它在那里被称为PagingList
。为Ebeans Finder
helper class播放allows you to get such a PagingList
for your query。
假设您希望每页显示50个项目,并希望检索第一页的项目。然后你会写这样的东西
public static List<dblp_pub_new> getpageItems(int page) {
int pageSize = 50;
return find.findPagingList(pageSize).getPage(page).getList();
}
另请注意,您的班级名称dblp_pub_new
非常不寻常。有关详细信息,请参阅this question。
答案 2 :(得分:0)
除了 Carsten的回答之外,我只提到Page本身包含几个有用的方法,它们有助于在视图中构建分页菜单,因此使用整个Page对象更容易:
public static com.avaje.ebean.Page<dblp_pub_new> getPage(int pageSize, int page) {
return find.findPagingList(pageSize).getPage(page);
}
然后你可以在视图中使用它:
<ul>
@for(item <- myPage.getList){
<li>@item.name</li>
}
</ul>
<b>Total page count is: @myPage.getTotalPageCount()</b>
答案 3 :(得分:0)
当前接受的建议 findPagingList
的答案不再有效。见https://github.com/ebean-orm/ebean/issues/96
现在使用 setMaxRows()
应该适用于任何 Query
,但您必须在其上使用 findPagedList
(相对于 findPagingList
)。像这样:
List<dblp_pub_new> list = dblp_pub_new.find.query()
.where().eq("some_column", some_value)
.orderBy("some_column desc")
.setMaxRows(50)
.findPagedList()
.findList()