2017-04-20 1 views
0

私はこの問題に悩まされています。 私は入れ子になったJsonをコントローラへの入力として取得し、次にMarketPriceオブジェクト型に変換します。すべて正常に動作しています。問題が発生している間のみ保存します。最初のレコードは複数回保存されます。デバッグ中に表示されます。同じ値が複数回DBに保存されています。休止状態の別のリストがある場合でも、

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

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

問題はここに直面していますコントローラに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データは、1つのレコードのみがDBに複数回追加されますです。

答えて

2

もう一度同じ参照市場価格を使用しています。新しい行を作成するには、新しい参照を作成する必要があります。それ以外の場合は、同じ管理対象エンティティの更新が継続されます。また、すべてのエンティティを保存した後でトランザクションをコミットします。

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変数を除いて、これを使用している間、すべてmarketPriceオブジェクトのnullに設定されます – Hema

+0

両方が同じです。編集 –

関連する問題