不接收来自数据库的更新数据(Spring OneToMany 关系)
Posted
技术标签:
【中文标题】不接收来自数据库的更新数据(Spring OneToMany 关系)【英文标题】:Doesn't receive updated data from the database (Spring OneToMany relationship) 【发布时间】:2021-04-18 18:14:34 【问题描述】:我是 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),一切正常。但是在添加 Message 之后,此函数返回相同的 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";
【问题讨论】:
请显示您如何添加消息的代码。 你在使用缓存吗 @AlexRudenko 将代码添加到主题 @Hamza 我认为没有 我怀疑问题出在 FETCHTYPE 上。还要添加有关如何添加消息以及两个实体之间关系的代码。 【参考方案1】:您似乎将作者添加到消息中,但您没有为作者做同样的事情:
例如在 Author 类中添加一个新方法来添加新消息:
public class Author
...
public void addMessage(Message message)
if(messages==null) messages= new HashSet();
messages.add(message);
...
并像这样在您的代码中使用它:
author.addMessage(message);
请注意,您应该定义 hashCode 方法,否则 HashSet 将忽略新消息。
此外,如果您对使用双向关系没有任何限制,最好只使用单向关系(消息 -> 作者)。
【讨论】:
以上是关于不接收来自数据库的更新数据(Spring OneToMany 关系)的主要内容,如果未能解决你的问题,请参考以下文章
Spring-batch - 比较来自 csv 的数据并相应地更新 Salesforce 中的记录
SwiftUI ObjectBinding 不会使用 combine 接收来自可绑定对象的 didchange 更新
Spring MVC - 如何使用 JSP 表更新数据库中的行?