2017-08-08 38 views
1

我的程序需要兩個字符串,將它們拆分爲數組列表,查找常用字符串,並允許用戶使用複選框形式存儲常用字符串。使用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循環每次遍歷manyTriggers時將覆蓋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()方法,總是創建一個新的對象(請注意,使用這種方法你不能更新現有的記錄)。參見:

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