休眠:如何 return 映射<String, List<Object>>
Hibernate: how to return map<String, List<Object>>
我有 JavaFX
申请TreeTableView
。
我想在树中显示产品列表。第一层树必须包含 Product.article。树的第二层必须有包含 Product.article 的产品列表,如下所示:
article1/
-- name model sizes
-- name model sizes
article2/
-- name model sizes
-- name model sizes
我在 List<String article>
上用 foreach 开发了这个,但是生产数据库 table 将包含 1000 多篇文章。每篇文章都应该有一个通过不同查询从数据库中获取的产品列表。会这么慢...
有什么方法可以获取 Hibernate 查询的结果集作为 Map<String article, List<Product>>
?
P.S.: 抱歉我的英语不好
您可以使用
在一次查询中将所有产品检索为 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));
这应该是相当有效的,因为它只涉及一个查询,并且假设您无论如何都需要所有数据,那么您需要以某种方式获取它。 "grouping by" 操作在产品数量上或多或少呈线性关系(我认为),与执行查询相比,所花费的时间可能可以忽略不计。
(显然,您可以一次完成此操作,尽管它做的是完全相同的事情):
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));
我有 JavaFX
申请TreeTableView
。
我想在树中显示产品列表。第一层树必须包含 Product.article。树的第二层必须有包含 Product.article 的产品列表,如下所示:
article1/
-- name model sizes
-- name model sizes
article2/
-- name model sizes
-- name model sizes
我在 List<String article>
上用 foreach 开发了这个,但是生产数据库 table 将包含 1000 多篇文章。每篇文章都应该有一个通过不同查询从数据库中获取的产品列表。会这么慢...
有什么方法可以获取 Hibernate 查询的结果集作为 Map<String article, List<Product>>
?
P.S.: 抱歉我的英语不好
您可以使用
在一次查询中将所有产品检索为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));
这应该是相当有效的,因为它只涉及一个查询,并且假设您无论如何都需要所有数据,那么您需要以某种方式获取它。 "grouping by" 操作在产品数量上或多或少呈线性关系(我认为),与执行查询相比,所花费的时间可能可以忽略不计。
(显然,您可以一次完成此操作,尽管它做的是完全相同的事情):
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));