Hibernate:如何返回map <string,list <object =“”>&gt;

时间:2016-05-26 14:28:25

标签: java hibernate javafx treetableview

JavaFX申请了TreeTableView

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

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

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

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

P.S。:对不起我的英语不好。

1 个答案:

答案 0 :(得分:1)

您可以使用

在一个查询中将所有产品检索为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));