Java 一对多关系中的Hashmap列表

Java 一对多关系中的Hashmap列表,java,jpa,map,one-to-many,Java,Jpa,Map,One To Many,我有两个一对多关系的表。我需要做的是将子表(许多部分)分类为一些类别并显示它们。例如,我有一个区域和产品表。所以一个地区会有很多产品,但是有很多产品属于一个特定的类别,我将把它们全部展示在一个部分中。 所以我想要的是: @Entity public class Region { // ... some codes here @OneToMany(fetch = FetchType.LAZY) private List<HashMap<Long, List&l

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

@Entity
public class Region {

    // ... some codes here
    @OneToMany(fetch = FetchType.LAZY)
    private List<HashMap<Long, List<Product>>> ProductEntities;
    // ... some codes here
}
@实体
公共类区域{
//…这里有一些代码
@OneToMany(fetch=FetchType.LAZY)
私营实体;
//…这里有一些代码
}

有什么建议吗?

我建议您先做关系模型,映射到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

这就是我正在做的。但如果能得到更好的解决方案,我们将不胜感激

@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
}
@实体
公共类区域{
//…这里有一些代码
@OneToMany(fetch=FetchType.LAZY)
私营实体;
@短暂的
私有HashMap产品映射;
公共HashMap getProductsMap(){
if(ProductEntities!=null){
对于(产品:ProductEntities){
List productList=productsMap.get(product.getProductTypeEntity().getId());
if(productList==null){
productList=新的ArrayList();
}
productList.add(产品);
productsMap.put(product.getProductTypeEntity().getId(),productList);
}
}
返回产品映射;
}
//…其余代码
}

谢谢你的回答。但这并不能解决我的问题。首先,我仅限于
r.地区名称、c.类别名称、p.产品名称
,这是因为group by的性质。其次,我将把它们作为列表,这同样应该在UI中有一个机制来区分类别(在我的例子中,它不仅仅是显示。顺序在UI中以特定的方式定义)