![](/img/trans.png)
[英]update @OneToMany relationship (Spring Boot, Spring Data)
[英]Doesn't receive updated data from the database (Spring OneToMany relationship)
我是 java 的新手,現在我正在編寫一個簡單的學習網站。 我遇到了這個問題:
用戶實體:
@OneToMany(mappedBy = "author", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private Set<Message> messages;
消息實體:
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "user_id")
private User author;
Controller:
Set<Message> messages = user.getMessages();
model.addAttribute("messages", messages);
當我第一次(使用getMessages )獲取數據時,一切正常。 但是添加Message之后,這個function返回同樣的Set,沒有新的Message。 盡管出現了數據庫中的條目並且如果調用:
messages = messageRepo.findAll();
新消息出現在列表中。 重啟服務器后, getMessages方法中會出現一篇新文章。 我怎么了,為什么添加新消息后數據沒有更新?
升級版:
添加消息的代碼:
@PostMapping("/main")
public String add(
@AuthenticationPrincipal User user,
@Valid Message message,
BindingResult bindingResult,
Model model
) throws IOException {
message.setAuthor(user);
if (bindingResult.hasErrors()) {
Map<String, String> errorsMap = ControllerUtils.getErrors(bindingResult);
model.mergeAttributes(errorsMap);
model.addAttribute("message", message);
} else {
model.addAttribute("message", null);
messageRepo.save(message);
}
return "main";
}
似乎您將作者添加到消息中,但您沒有為作者做同樣的事情:
例如在作者 class 中添加一個新方法來添加新消息:
public class Author {
...
public void addMessage(Message message){
if(messages==null) messages= new HashSet();
messages.add(message);
}
...
}
並在您的代碼中使用它,如下所示:
author.addMessage(message);
請注意,您應該定義 hashCode 方法,否則 HashSet 將忽略新消息。
此外,如果您對使用雙向關系沒有任何限制,那么最好只使用單向關系(消息->作者)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.