2017-04-20 27 views
0

我弄錯了這個問題,請任何人都可以幫助解決這個問題。 我將得到嵌套的Json作爲輸入到控制器,然後轉換爲MarketPrice對象類型。一切工作正常,只有當保存面臨問題時。第一個記錄將被保存多次。但在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"} 

問題現在面臨這裏只有一條記錄會加入到DB多次。

回答

2

您再次使用相同的參考marketPrice。您必須創建新的引用才能創建新的行,否則它將繼續更新相同的受管實體。另外,在保存所有實體後提交你的事務。

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"; 
} 
+0

這是在每個循環中創建的新變量。變量的名稱描述了它的用法。 –

+0

使用此除currentItem變量都設置爲null這是在marketPrice對象 – Hema

+0

都是相同的。編輯 –

相關問題