Java Vaadin 8网格不适用于太多的条目

Java Vaadin 8网格不适用于太多的条目,java,vaadin,dataprovider,vaadin-grid,Java,Vaadin,Dataprovider,Vaadin Grid,我创建了一个Vaadin网格来显示一些实体,这很好,我使用了回调中的数据提供程序。现在我在数据库中添加了6800000个条目,网格表不再可以滚动,首先我尝试了1200000个条目,但仍然有效。我不明白这一点,因为网格只加载了几个实体,而不是全部 数据提供者: this.defaultDataProv = DataProvider.fromCallbacks((query) -> { // sorting defaults String sort = "sortId";

我创建了一个Vaadin网格来显示一些实体,这很好,我使用了回调中的数据提供程序。现在我在数据库中添加了6800000个条目,网格表不再可以滚动,首先我尝试了1200000个条目,但仍然有效。我不明白这一点,因为网格只加载了几个实体,而不是全部

数据提供者:

this.defaultDataProv = DataProvider.fromCallbacks((query) -> {
    // sorting defaults
    String sort = "sortId";
    Sort.Direction d = Sort.DEFAULT_DIRECTION;
    if (!query.getSortOrders().isEmpty()) {
        // parsing vaadin sort to spring.hibernate sort
        d = (query.getSortOrders().get(0).getDirection() == SortDirection.ASCENDING) ? Sort.Direction.ASC : Sort.Direction.DESC;
        sort = query.getSortOrders().get(0).getSorted();
    }
    Iterable<Article> findAll = this.arService.findAll(query.getOffset(), query.getLimit(), new Sort(d, sort));
    return StreamSupport.stream(findAll.spliterator(), true);
}, query -> {
    return this.arService.cntArticle();
});
this.defaultDataProv=DataProvider.fromCallbacks((查询)->{
//排序默认值
字符串sort=“sortId”;
Sort.Direction d=Sort.DEFAULT\u方向;
如果(!query.getSortOrders().isEmpty()){
//将vaadin排序解析为spring.hibernate排序
d=(query.getSortOrders().get(0.getDirection()==SortDirection.asting)?Sort.Direction.ASC:Sort.Direction.DESC;
sort=query.getSortOrders().get(0.getSorted();
}
宜人的


感谢您的帮助。

网格中的行数受滚动条Div元素的最大大小限制。这取决于浏览器的不同。例如,使用默认行高,您可以在Chrome中拥有约880K行,在Firefox中拥有235K行,在IE11中拥有40K行

这里有更多信息:

该限制适用于Vaadin 7和8


在(第10节及更高版本)中,完全重新完成,其实现没有此限制。

出于好奇:您希望用户如何处理包含700万个条目的网格?谢谢您的回答。
private Grid<Article> articleGrid;
this.articleGrid = new Grid<>("Artikel");
this.articleGrid.setSelectionMode(Grid.SelectionMode.SINGLE);


this.articleGrid.setDataProvider(this.defaultDataProv);
Grid.Column<Article, String> nameColumn = this.articleGrid.addColumn(Article::getName).setCaption("Name").setId("name");
this.articleGrid.addColumn(Article::getEan).setCaption("EAN").setId("ean");
this.articleGrid.addColumn(Article::getSortId).setCaption("Sortid").setId("sortId");
// addColum for stocks
this.articleGrid.addColumn((a) -> {
    return a.getStocks().size();
}).setCaption("Bestände");

articleGrid.addColumn(Article::getCompleteCntStock).setCaption("Zählbestand");
articleGrid.addColumn(Article::getCompleteOldStock).setCaption("Istbestand");

super.addComponent(this.articleGrid);
super.addComponent(this.searchLayout);
super.addComponent(this.filterLayout);
super.addComponent(this.editLayout);
super.setSizeFull();
this.articleGrid.setHeight(500f, Unit.PIXELS);
this.articleGrid.setWidth(1000f, Unit.PIXELS);
@Entity
@Indexed
@Getter
@Setter
public class Article implements Serializable {

    private static final long serialVersionUID = -1812015490640296522L;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(nullable = false, unique = true)
    @Field(index = Index.YES)
    private Long id;

    @Field(index = Index.YES)
    @Column(nullable = true, unique = true)
    private Long sortId;

    @Field(index = Index.YES)
    @Column(nullable = true, unique = true)
    private Long ean;

    @Column(nullable = false, unique = false)
    private String name;
    private String descr;

    @Column(nullable = false)
    @OneToMany(mappedBy = "article", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    @ContainedIn
    private List<Stock> stocks;

    /**
     * Instances the {@link #stocks} with an empty list.
     */
    public Article() {
        stocks = new ArrayList<>();
    }

    /**
     * @return all Stocks summed up.
     */
    public int getCompleteCntStock() {
        int re = 0;
        for (Stock stock : stocks) {
            re += stock.getCntStock();
        }
        return re;
    }

    /**
     *
     * @return all old Stocks summed up.
     */
    public int getCompleteOldStock() {
        int re = 0;
        for (Stock stock : stocks) {
            re += stock.getOldStock();
        }
        return re;
    }
}