2017-08-08 13 views
1

私のプログラムは、2つの文字列をarraylistに分割し、共通の文字列を見つけ、チェックボックスの形式で共通の文字列を格納できるようにします。daoとforループを使用してデータベースに保存し、上書き保存しない

public String savedResults(@ModelAttribute @Valid Trigger newTrigger, User aUser, Model model, @RequestParam String aTrigger){ 

    model.addAttribute("aTrigger", aTrigger); 

    aUser.getUid(); 

    newTrigger.setUser(aUser); 
    String[] manyTriggers = aTrigger.split(","); 

    for(String item : manyTriggers) { 
     newTrigger.setKnownTriggers(item); 
     triggerDao.save(newTrigger); 
    } 
    return "html file" 
} 

問題は、選択した各アイテムを新しい行に保存することです。 forループは、を反復するたびにdao.saveを上書きします。これは、データベースに保存してデータベースの新しい行に次の項目を保存する代わりに繰り返します。

+0

'for'ループのたびに' Trigger'の新しいインスタンスを作成して保存してみてください。 – Jason

答えて

0

次のようにあなたは、あなたがあなたのforループ内にそれを保存するたびにTriggerの新しいインスタンスを作成することがあります。

public String savedResults(@ModelAttribute @Valid Trigger newTrigger, User aUser, Model model, @RequestParam String aTrigger){ 

    model.addAttribute("aTrigger", aTrigger); 

    aUser.getUid(); 

    String[] manyTriggers = aTrigger.split(","); 

    for(String item : manyTriggers) { 
     Trigger newTrigger = new Trigger(); 
     newTrigger.setUser(aUser); 
     newTrigger.setKnownTriggers(item); 
     triggerDao.save(newTrigger); 
    } 
    return "html file" 
} 
別のオプションは、常に新しいを作成すること、JPA persist()方法を使用することです

オブジェクト(このmwthodを使用すると、既存のレコードを更新することはできません)。参照:

public String savedResults(@ModelAttribute @Valid Trigger newTrigger, User aUser, Model model, @RequestParam String aTrigger){ 

    model.addAttribute("aTrigger", aTrigger); 

    aUser.getUid(); 

    newTrigger.setUser(aUser); 
    String[] manyTriggers = aTrigger.split(","); 

    for(String item : manyTriggers) { 
     newTrigger.setKnownTriggers(item); 
     triggerDao.persist(newTrigger); 
    } 
    return "html file" 
} 
関連する問題