0

我有JavaFX应用程序TreeTableView

我想在树中显示产品列表。第一级树必须包含 Product.article。树的第二级必须有包含 Product.article 的产品列表,如下所示:

article1/
    -- name model sizes
    -- name model sizes
article2/
    -- name model sizes
    -- name model sizes

我已经在 List 上使用 foreach 开发了这个,<String article>但生产中的数据库表将包含 1000 多篇文章。每篇文章都应该有一个通过不同查询从数据库中获取的产品列表。会很慢...

有没有办法将 Hibernate 查询的结果集作为 Map <String article, List<Product>>

PS:对不起我的英语不好。

4

1 回答 1

2

List<Product>您可以使用一个查询检索所有产品

TypedQuery<Product> query = em.createQuery("select p from Product p", Product.class);
List<Product> allProducts = query.getResultList();

然后组织它们:

Map<String, List<Product>> productsByArticle = allProducts.stream()
    .collect(Collectors.groupingBy(Product::getArticle));

这应该是相当有效的,因为它只涉及一个查询,并且假设您无论如何都需要所有数据,您需要以某种方式获取它。“分组依据”操作在产品数量上或多或少是线性的(我认为),与执行查询相比,所花费的时间可能可以忽略不计。

(显然,您可以一次性完成此操作,尽管它正在做完全相同的事情):

TypedQuery<Product> query = em.createQuery("select p from Product p", Product.class);
Map<String, List<Product>> productsByArticle = query.getResultList().stream()
    .collect(Collectors.groupingBy(Product::getArticle));
于 2016-05-26T14:41:25.727 回答