一对多关系中的Hashmap列表

时间:2014-10-27 17:26:57

标签: java jpa map one-to-many

我有两张表,一对多的关系。我需要做的是将子表(许多部分)分类为某些类别并显示它们。例如,我有一个区域和产品表。因此,一个地区将拥有许多产品,但有许多产品属于特定类别,我将把它们全部显示在一个部分中。 所以我想要的是:

@Entity
public class Region {

    // ... some codes here
    @OneToMany(fetch = FetchType.LAZY)
    private List<HashMap<Long, List<Product>>> ProductEntities;
    // ... some codes here
}

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

这是我正在做的事情。但是,如果能得到更好的解决方案,请欣赏。

@Entity
public class Region {

    // ... some codes here
    @OneToMany(fetch = FetchType.LAZY)
    private List<Product> ProductEntities;

    @Transient
    private HashMap<Long, List<Product>> productsMap;

    public HashMap<Long, List<Product>> getProductsMap() {
        if (ProductEntities!= null) {
            for (Product product : ProductEntities) {
                List<Product> productList = productsMap.get(product.getProductTypeEntity().getId());
                if (productList == null) {
                    productList= new ArrayList<Product>();
                }
                productList.add(product);
                productsMap.put(product.getProductTypeEntity().getId(), productList);
            }
        }
        return productsMap;
    }

    // ... rest of codes
}

答案 1 :(得分:0)

我建议你先做关系模型,映射到JPA,然后用group by进行查询。

假设以下模型:

+--------+    /+---------+\    +----------+
| Region |-----| Product |-----| Category |
+--------+    \+---------+/    +----------+

查询可能是这样的:

select r.region_name, c.category_name, p.product_name
from Product p
join p.region r
join p.category c
group by r.region_name, c.category_name, p.product_name