0

私はJavaFXアプリケーションを持っていますTreeTableView

商品一覧をツリー表示したい。ツリーの最初のレベルには Product.article が含まれている必要があります。ツリーの 2 番目のレベルには、次のように Product.article を含む製品のリストが必要です。

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

リストの foreach でこれを開発しました<String article>が、本番環境のデータベース テーブルには 1000 を超える記事が含まれます。各記事には、個別のクエリによるデータベースからの製品のリストが必要です。とても遅くなります...

Hibernate クエリの結果セットを Map として取得する方法はあります<String article, List<Product>>か?

PS: 下手な英語で申し訳ありません。

4

1 に答える 1

2

List<Product>を使用して、すべての製品を1 つのクエリで取得できます。

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));

単一のクエリしか必要としないため、これはかなり効率的であるはずです。とにかくすべてのデータが必要であると仮定すると、何らかの方法で取得する必要があります。「グループ化」操作は、製品の数に多かれ少なかれ線形であり(私は思う)、おそらくクエリの実行に比べて無視できる時間です。

(明らかに、まったく同じことを行っていますが、これを 1 回のショットで行うことができます):

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 に答える