簡體   English   中英

不接收來自數據庫的更新數據(Spring OneToMany 關系)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM