0

I have API get data from 3 table

I use native query in Spring Boot and database MySQL:

@Query(value = "SELECT stock.product_id as productId,two.product_name as productName, two.brand as brand, two.description as description, two.categoryid as categoryName,GROUP_CONCAT(stock.price_stock) as priceStock,GROUP_CONCAT(stock.quantity_stock) as quantityStock,GROUP_CONCAT(stock.size_id) as sizeName,GROUP_CONCAT(stock.color_id) as colorName,two.ims as urlImage\n" +
            "FROM stock\n" +
            "INNER JOIN ((SELECT product.product_id,product.product_name,product.brand,product.description,product.categoryid,GROUP_CONCAT(product_image.url_image) as ims FROM product INNER JOIN product_image ON product.product_id = product_image.product_id GROUP BY product.product_id)) as two\n" +
            "ON stock.product_id = two.product_id\n" +
            "GROUP BY stock.product_id",nativeQuery = true)
    List<Map<String,Object>> getAllProductAndStock();

This API return data example (not full data):

[
        {
            "productId": 4,
            "colorName": "DarkRed,Violet,Lime,White",
            "sizeName": "XL,M,3XL,2XL",
            "brand": "LISA",
            "quantityStock": "9,13,6,15",
            "priceStock": "39,41,39,50",
            "productName": "TARTAN PRINT DRESS",
            "categoryName": "DRESS",
        },
        {
            "productId": 5,
            "categoryName": "Coat",
            "colorName": "Gold,Silver,DarkRed",
            "productName": "LONG TRENCH COAT",
            "sizeName": "L,XL,L",
            "quantityStock": "16,5,6",
            "brand": "HOODIE",
            "priceStock": "94.1,94.1,94.1",
        }
]

Now I want to change "colorName","sizeName","quantityStock","priceStock" to list like:

[
        {
            "productId": 4,
            "colorName": [DarkRed,Violet,Lime,White],
            "sizeName": [XL,M,3XL,2XL],
            "brand": "LISA",
            "quantityStock": [9,13,6,15],
            "priceStock": [39,41,39,50],
            "productName": "TARTAN PRINT DRESS",
            "categoryName": "DRESS",
        },
        {
            "productId": 5,
            "categoryName": "Coat",
            "colorName": [Gold,Silver,DarkRed],
            "productName": "LONG TRENCH COAT",
            "sizeName": [L,XL,L],
            "quantityStock": [16,5,6],
            "brand": "HOODIE",
            "priceStock": [94.1,94.1,94.1],
        }
]

To change to list I code like below:


//        data is get data from @Query
        List<Map<String,Object>> data = productService.getAllProductsAndStocks();
//        This code below change to list
        data.stream().collect(Collectors.toList()).forEach(u -> u.entrySet().stream().forEach(k ->{
            if(Arrays.asList("colorName","sizeName","quantityStock","priceStock").contains(k.getKey())){
                    List<?> newData = Arrays.asList(k.getValue().toString().split(","));
                    System.out.println(newData);
                    u.put(k.getKey(), newData);
            }

        }));

But When I run it get error: "A TupleBackedMap cannot be modified". How can I change "colorName","sizeName","quantityStock","priceStock" to list ?

Thanks

LITTE_BOY
  • 1
  • 2
  • 2

0 Answers0