我是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;
控制器:
Set<Message> messages = user.getMessages();
model.addAttribute("messages", messages);
当我第一次得到数据时(使用getmessages),一切都正常。但是在添加一条消息之后,这个函数返回相同的集合而不返回新消息。尽管数据库中出现一个条目,如果调用:
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";
}
1条答案
按热度按时间siv3szwd1#
似乎您将作者添加到邮件中,但对作者没有执行相同的操作:
例如,在author类中添加新方法以添加新消息:
在你的代码中这样使用:
请注意,您应该定义hashcode方法,否则hashset将忽略新消息。
另外,如果您没有任何约束来使用双向关系,那么最好只使用单向关系(message->author)。