Как сделать группу по накоплению в весенней загрузке jpa. Хотите получить сумму атрибута объекта вместе со списком объектов - PullRequest
0 голосов
/ 24 апреля 2020

У меня есть запас класса сущностей, в котором хранятся товар и склад двух сущностей. Сочетание товара и склада всегда будет уникальным, и для хранения информации о наличии товара для каждого товара на каждом складе используется складская сущность.

@Entity
public class Stock extends ReusableFields
{

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE)
    Long stockId;

    @ManyToOne(fetch=FetchType.LAZY,cascade = CascadeType.ALL)
    @JoinColumn(name="productId",nullable=false )
    @JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
    @NotFound(action=NotFoundAction.IGNORE)
    @NonNull
    Product product;

    @ManyToOne(fetch=FetchType.LAZY,cascade = CascadeType.ALL)
    @JoinColumn(name="warehouseName",nullable=false)
    @JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
    @NotFound(action=NotFoundAction.IGNORE)
    @NonNull
    Warehouse warehouse;

    @NonNull
    Float quantityInHand;

    //getter and setter
}

Теперь я хочу получить общий запас каждого товара, а затем подробный запас. , Например,

{
    "data": [
        {
            "productId": 22,
            "totalQuantityInHand": 50,
            "details": [
                {
                    "warehouse": "warehouse1",
                    "quantityInHand": 20
                },
                {
                    "warehouse": "warehouse2",
                    "quantityInHand": 30
                }
            ]
        }
    ]
}

Один из способов, которым я могу достичь этого, - это выбрать все записи со склада, затем выбрать уникальные идентификаторы продукта, затем выполнить цикл по каждому производителю и передать объекту DAO productid, totalquantity и список объектов запаса для этот продукт.

Я хочу знать, есть ли лучшее оптимальное решение, которое может спасти меня от написания итераций. По сути, если бы мне пришлось сделать то же самое в mysql, мой запрос был бы примерно таким:

SELECT 
        p.product_id AS productId,
        s.warehouse_name   AS warehouseId, 
       SUM(s.quantity_in_hand) AS quantity 
FROM   stock s 
       INNER JOIN product p 
               ON p.product_id = s.product_id 
       INNER JOIN warehouse w 
               ON w.warehouse_id = s.warehouse_name 
GROUP BY productId,warehouseId
WITH ROLLUP;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...