这个问题令我震惊。我已经创建了嵌套JSON一个POJO,我在获取数据MarketPrice对象,其中marketPrices是一个ArrayList具有两个元素。
MarketPrice
marketPrices
ArrayList
这是MarketPrice POJO类,实际上我需要将其保存到MarketPrice表中。即,整个JSON对象。但是我有两个实体。这怎么可能?
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;
这是我从控制器的服务器端获取的嵌套JSON数据:
中的JSON数据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"; }
对DAO进行了这些更改之后,它终于保存了。
如注释中所述,您可以按以下方式修改代码以使其按预期工作。
@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;
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;
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"; }