使用Hibernate将嵌套的JSON数据保存到MySQL数据库中

这个问题令我震惊。我已经创建了嵌套JSON一个POJO,我在获取数据MarketPrice对象,其中marketPrices是一个ArrayList具有两个元素。

这是MarketPrice POJO类,实际上我需要将其保存到MarketPrice表中。即,整个JSON对象。但是我有两个实体。这怎么可能?

@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;

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数据:

{

"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"

}

@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;

}

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";

}

以上是 使用Hibernate将嵌套的JSON数据保存到MySQL数据库中 的全部内容, 来源链接: utcz.com/qa/414190.html

回到顶部