不从数据库接收更新的数据(spring-onetomany关系)

dgtucam1  于 2021-07-14  发布在  Java
关注(0)|答案(1)|浏览(356)

我是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";
    }
siv3szwd

siv3szwd1#

似乎您将作者添加到邮件中,但对作者没有执行相同的操作:
例如,在author类中添加新方法以添加新消息:

public class Author {
...
   public void addMessage(Message message){
        if(messages==null) messages= new HashSet();
        messages.add(message);
   }
...
}

在你的代码中这样使用:

author.addMessage(message);

请注意,您应该定义hashcode方法,否则hashset将忽略新消息。
另外,如果您没有任何约束来使用双向关系,那么最好只使用单向关系(message->author)。

相关问题