Java 使用dao和for循环保存到数据库,保存时被覆盖
我的程序获取两个字符串,将它们拆分为一个arraylist,查找公共字符串,并允许用户使用复选框表单存储公共字符串Java 使用dao和for循环保存到数据库,保存时被覆盖,java,spring-mvc,spring-boot,intellij-idea,Java,Spring Mvc,Spring Boot,Intellij Idea,我的程序获取两个字符串,将它们拆分为一个arraylist,查找公共字符串,并允许用户使用复选框表单存储公共字符串 public String savedResults(@ModelAttribute @Valid Trigger newTrigger, User aUser, Model model, @RequestParam String aTrigger){ model.addAttribute("aTrigger", aTrigger); aUser.getUid(
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
,而不是将其保存到数据库并继续保存数据库新行中的下一项。每次在for
循环中保存时,您都可以创建触发器的新实例,详情如下:
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"
}
另一个选项是使用JPApersist()
方法,该方法始终创建一个新对象(请注意,使用此方法您将无法更新现有记录)。见:
每次尝试在for
循环中创建并保存Trigger
的新实例。
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"
}