Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Saving nested JSON data into a MySQL database using Hibernate

I am strucked with this issue. I have created a POJO for nested JSON and I am getting data in MarketPrice object where marketPrices is an ArrayList which has two elements.

This is MarketPrice POJO class and actually I need to save it into the MarketPrice table. I.e, entire JSON object. But I have two entities. How can this be possible?

MarketPrice.java

@Entity
@Table(name = "MarketPrice")

public class MarketPrice {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "itemId")
private Long itemId;

@Column(name = "analysisDate")
private Date analysisDate;

@Column(name = "marketName")
private String marketName;

@Column(name = "category")
private String category;

@Column(name = "marketPlace")
private String marketPlace;

@Column(name = "state")
private String state;

@Column(name = "district")
private String district;


public ArrayList<Items> marketPrices;

Items.java

public class Items implements Serializable {

    private static final long serialVersionUID = -2428562977284114465L;

    @Id
    @Column(name="id")
    private int id;

    @Column(name = "itemName")
    private String itemName;

    @Column(name = "unitofPrice")
    private String unitofPrice;

    @Column(name = "minimumPrice",columnDefinition = "Float(10,2)")
    private Float minimumPrice;

    @Column(name = "maximumPrice",columnDefinition = "Float(10,2)")
    private Float maximumPrice;

This is my nested JSON data I'm getting from at the server side in the controller:

JSON data in marketPrices

{
    "marketPrices": [{
        "itemName": "Mango",
        "unitofPrice": "Kg",
        "minimumPrice": "10",
        "maximumPrice": "20"
    }, {
        "itemName": "Grapes",
        "unitofPrice": "Kg",
        "minimumPrice": "30",
        "maximumPrice": "40"
    }],
    "state": "xyz",
    "district": 4,
    "marketPlace": 5001,
    "marketName": "pmc",
    "category": "Fruits"
}

Controller.java

@RequestMapping(value = {"/saveAnalysis"} , method = RequestMethod.POST,consumes = "application/json")
@ResponseBody
public MarketPrice bulkSaveMarketAnalysis(@RequestBody 
        String marketPrices, HttpServletResponse response,
        HttpServletRequest request) throws JsonProcessingException, IOException, JSONException{

    MarketPrice marketPrice1 = new MarketPrice();
    System.out.println("Json Data"+marketPrices);//here am getting valid nested json from UI
    Gson gson = new Gson();
    MarketPrice marketPrice = gson.fromJson(marketPrices, MarketPrice.class);//converting it into Entity type all values are present in it.
    //Am strucked after this,How to save nested json into DB.

    String marketDataResponse =  analyserService.saveListOfMarketPrice(marketPrice);
    marketPrice1.setStatusMessage("success");
    return marketPrice1;
}

DAO.java

public String saveListOfMarketPrice(MarketPrice marketPrice) {
    System.out.println("In Analyser DAO fro bulk saving");
    final Session session = getSession();
    session.beginTransaction();
    marketPrice.setAnalysisDate(new Date());
    for (Items item : marketPrice.marketPrices) {
       marketPrice.currentItem = item;
       marketPrice.setItemName(marketPrice.currentItem.getItemName());
       marketPrice.setUnitofPrice(marketPrice.currentItem.getUnitofPrice());
       marketPrice.setMinimumPrice(marketPrice.currentItem.getMinimumPrice());
       marketPrice.setMaximumPrice(marketPrice.currentItem.getMaximumPrice());
        session.save(marketPrice);
    }
    session.getTransaction().commit();
    session.close();
    return "success";
}

After making these changes to DAO it saved finally Thank you.

like image 332
Hema Avatar asked Feb 10 '26 11:02

Hema


1 Answers

As discussed in the comments, you can modify your code as below to make it work as expected.

MarketPrice.java

@Entity
@Table(name = "MarketPrice")

public class MarketPrice {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "itemId")
private Long itemId;

@Column(name = "analysisDate")
private Date analysisDate;

@Column(name = "marketName")
private String marketName;

@Column(name = "category")
private String category;

@Column(name = "marketPlace")
private String marketPlace;

@Column(name = "state")
private String state;

@Column(name = "district")
private String district;

 @Transient
 public Items currentItem;

@Column(name = "itemName")
public String getItemName() {
    return this.currentItem.itemName;
}

@Column(name = "unitofPrice")
public String getUnitofPrice() {
    return this.currentItem.unitofPrice;
}

@Column(name = "minimumPrice",columnDefinition = "Float(10,2)")
public Float getMinimumPrice() {
    return this.currentItem.minimumPrice;
}

@Column(name = "maximumPrice",columnDefinition = "Float(10,2)")
public Float getMaximumPrice() {
    return this.currentItem.maximumPrice;
}

@Transient
public ArrayList<Items> marketPrices;

Items.java

public class Items implements Serializable {

    private static final long serialVersionUID = -2428562977284114465L;

    @Id
    @Column(name="id")
    private int id;

    public String itemName;

    public String unitofPrice;

    public Float minimumPrice;

    public Float maximumPrice;

DAO.java

public String saveListOfMarketPrice(MarketPrice marketPrice) {
        System.out.println("In Analyser DAO fro bulk saving");
        final Session session = getSession();
        session.beginTransaction();
        for (Items item : marketPrice.marketPrices) {
           marketPrice.currentItem = item;
           session.save(marketPrice);
        }
        session.getTransaction().commit();
        session.close();
        return "success";
    }
like image 156
Aruna Avatar answered Feb 13 '26 03:02

Aruna