【发布时间】:2016-02-01 13:10:21
【问题描述】:
我的模特是
@Entity
@Table(name = "user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(name="name")
private String name;
@Column(name="email")
private String email;
//getter & setter
}
我的控制器是
@RequestMapping(value = "user/userProfile", method = RequestMethod.POST)
public String saveUserProfile(@Valid UserProfile userProfile, @RequestParam("file") MultipartFile file,
BindingResult bindingResult, Model model) {
if (bindingResult.hasErrors()) {
model.addAttribute("userProfile", userProfile);
return "userprofileform";
}
userProfileService.saveUserProfile(userProfile);
} catch (IOException e) {
e.printStackTrace();
}
return "redirect:/user/home";
}
@RequestMapping("/user/userProfile/new")
public String newUserProfile(Model model) {
UserProfile profile = userProfileService.getUserProfileByUserId(userService.getLoggedInUser().getId());
model.addAttribute("userProfile", profile);
return "userprofile";
}
仓库是
@Transactional
public interface UserProfileRepository extends CrudRepository<UserProfile, Long>{
}
当我第一次创建 userProfile 时,它会成功创建,但是当我尝试更新它时,它会创建新条目。
但是在这个控制器中,当我使用 findone() 并复制所有信息时,它可以正常工作。
下面的相同保存方法替换为:
public String saveUserProfile(@Valid UserProfile userProfile, @RequestParam("file") MultipartFile file,
BindingResult bindingResult, Model model) {
if (bindingResult.hasErrors()) {
model.addAttribute("userProfile", userProfile);
return "userprofileform";
}
UserProfile tempProfile = userProfileService.getUserProfileByUserId(userService.getLoggedInUser().getId());
try {
if (tempProfile != null) {
tempProfile.setName(userProfile.getName());
tempProfile.setEmail(userProfile.getEmail()); userProfileService.saveUserProfile(tempProfile);
} else {
userProfile.setUserId(userService.getLoggedInUser().getId());
userProfileService.saveUserProfile(userProfile);
}
} catch (IOException e) {
e.printStackTrace();
}
return "redirect:/user/home";
}
这是写入方式还是我们如何更新记录?
还是保存在会话属性中(@SessionAttributes("yourAttributeName"))只是写法?
【问题讨论】:
标签: spring spring-mvc spring-boot spring-data-jpa