Java Hibernate:如何返回地图<;字符串,列表<;对象>&燃气轮机;

Java Hibernate:如何返回地图<;字符串,列表<;对象>&燃气轮机;,java,hibernate,javafx,treetableview,Java,Hibernate,Javafx,Treetableview,我有JavaFX应用程序和TreeTableView 我想在树中显示产品列表。树的第一级必须包含Product.article。树的第二级必须有包含Product.article的产品列表,如下所示: article1/ -- name model sizes -- name model sizes article2/ -- name model sizes -- name model sizes 我已经和foreach一起开发了这个列表,但是生产数据库表将包含

我有
JavaFX
应用程序和
TreeTableView

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

article1/
    -- name model sizes
    -- name model sizes
article2/
    -- name model sizes
    -- name model sizes
我已经和foreach一起开发了这个列表
,但是生产数据库表将包含1000多篇文章。每篇文章都应该通过不同的查询从数据库中获得一个产品列表。会很慢的

是否有任何方法可以将Hibernate查询的结果集作为映射


注意:对不起,我的英语不好。

您可以使用一次查询将所有产品检索为
列表

TypedQuery<Product> query = em.createQuery("select p from Product p", Product.class);
List<Product> allProducts = query.getResultList();
TypedQuery query=em.createQuery(“从产品p中选择p”,产品类);
List allProducts=query.getResultList();
然后组织他们:

Map<String, List<Product>> productsByArticle = allProducts.stream()
    .collect(Collectors.groupingBy(Product::getArticle));
Map productsByArticle=allProducts.stream()
.collect(Collectors.groupingBy(Product::getArticle));
这应该是相当有效的,因为它只涉及一个查询,并且假设您无论如何都需要所有数据,那么您需要以某种方式获得它。“grouping by”操作在产品数量上或多或少是线性的(我认为),与执行查询相比,所花费的时间可能可以忽略不计

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

TypedQuery query=em.createQuery(“从产品p中选择p”,产品类);
Map ProductsByAttribute=query.getResultList().stream()
.collect(Collectors.groupingBy(Product::getArticle));

您可以使用

TypedQuery<Product> query = em.createQuery("select p from Product p", Product.class);
List<Product> allProducts = query.getResultList();
TypedQuery query=em.createQuery(“从产品p中选择p”,产品类);
List allProducts=query.getResultList();
然后组织他们:

Map<String, List<Product>> productsByArticle = allProducts.stream()
    .collect(Collectors.groupingBy(Product::getArticle));
Map productsByArticle=allProducts.stream()
.collect(Collectors.groupingBy(Product::getArticle));
这应该是相当有效的,因为它只涉及一个查询,并且假设您无论如何都需要所有数据,那么您需要以某种方式获得它。“grouping by”操作在产品数量上或多或少是线性的(我认为),与执行查询相比,所花费的时间可能可以忽略不计

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

TypedQuery query=em.createQuery(“从产品p中选择p”,产品类);
Map ProductsByAttribute=query.getResultList().stream()
.collect(Collectors.groupingBy(Product::getArticle));

在一个查询中获取所有文章的整个
列表,然后将它们组织到客户端所需的结构中,这样做有效吗?这样,您只需要一个(大)查询。根据您的描述,
TreeTableView
的支持模型无论如何都需要完整的数据列表。是的,我需要一个查询,然后将它们组织到客户端的结构中。但现在,当我的框架加载时,我有1000多个查询到数据库以显示产品列表。我的意思是,这是一个错误的决定。在一个查询中获取所有文章的整个
列表
,然后将它们组织到客户端所需的结构中,这样做有效吗?这样,您只需要一个(大)查询。根据您的描述,
TreeTableView
的支持模型无论如何都需要完整的数据列表。是的,我需要一个查询,然后将它们组织到客户端的结构中。但现在,当我的框架加载时,我有1000多个查询到数据库以显示产品列表。我是说,这是个糟糕的决定。谢谢。我的意思是这个解决方案比我的好。谢谢。我的意思是这个解决方案比我的好。