相同的值多次保存到数据库中,即使休眠中存在另一个列表

Same values are saving into DB multiple times,Even though another list is present in hibernate

我搞砸了这个问题,请任何人帮助解决这个问题。 我将嵌套 Json 作为控制器的输入,然后将其转换为 MarketPrice 对象 type.Everything 工作正常,只有在保存时面对 issue.The 第一条记录将保存多个 times.But 在 forecah 循环中第二次调试时将显示另一个值。

MarketPrice.java

@Entity
@Table(name = "MarketPrice")
public class MarketPrice {

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

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

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

@Transient
public Items currentItem;

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

@Column(name="minimumPrice")
private Float minimumPrice;

@Column(name="maximumPrice")
private Float maximumPrice;
}

Items.java

public class Items implements Serializable {

    private static final long serialVersionUID = -2428562977284114465L;

    public String itemName;
    public Float minimumPrice;
    public Float maximumPrice;
}

控制器

@RequestMapping(value = {"/save"} , 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();
    Gson gson = new Gson();
    MarketPrice marketPrice = gson.fromJson(marketPrices, MarketPrice.class);
    if(marketPrice.getState() != null){
    String marketDataResponse = analyserService.saveListOfMarketPrice(marketPrice);
    System.out.println(marketDataResponse);
    return marketPrice1;
}

DAO.java

public String saveListOfMarketPrice(MarketPrice marketPrice) {
    final Session session = getSession();
   Transaction tx = 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);
        tx.commit();
        }
     session.close();
     return "success";
}

Json 数据到控制器

{"marketPrices":[{"itemName":"Grapes","unitofPrice":"Kg","minimumPrice":"11","maximumPrice":"22"},{"itemName":"Mango","unitofPrice":"Quintal","minimumPrice":"55","maximumPrice":"66"}],"state":"xyz","district":4,"marketPlace":5001,"marketName":"Apmc","category":"Fruits"}

这里面临的问题是只有一条记录会多次添加到数据库中。

您再次使用相同的参考市场价格。您必须创建新引用才能创建新行,否则它将继续更新同一托管实体。此外,在保存所有实体后提交您的事务。

public String saveListOfMarketPrice(MarketPrice marketPrice) {
    final Session session = getSession();
   Transaction tx = session.beginTransaction();

    for (Items item : marketPrice.marketPrices) {
       MarketPrice marketPriceToSaveInDBAsNewRow = new MarketPrice();
       marketPriceToSaveInDBAsNewRow.setAnalysisDate(new Date());
       marketPriceToSaveInDBAsNewRow.currentItem = item;
       marketPriceToSaveInDBAsNewRow.setItemName(marketPriceToSaveInDBAsNewRow.currentItem.getItemName());
       marketPriceToSaveInDBAsNewRow.setUnitofPrice(marketPriceToSaveInDBAsNewRow.currentItem.getUnitofPrice());
       marketPriceToSaveInDBAsNewRow.setMinimumPrice(marketPriceToSaveInDBAsNewRow.currentItem.getMinimumPrice());
       marketPriceToSaveInDBAsNewRow.setMaximumPrice(marketPriceToSaveInDBAsNewRow.currentItem.getMaximumPrice());
        session.save(marketPriceToSaveInDBAsNewRow);

        }
     tx.commit();
     session.close();
     //session.getTransaction().commit();
     return "success";
}