gpt4 book ai didi

java - 双向一对多关系不起作用

转载 作者:行者123 更新时间:2023-11-30 04:54:51 24 4
gpt4 key购买 nike

我制作了一个应用程序,可以显示数据库中的许多问题。为此,我创建了一个问题实体。我希望能够“报告”差/好等问题,因此为此我创建了一个反馈实体。

它们之间的关系是:一个问题可能有多个反馈,一个反馈属于一个问题。

问题是,当我保存问题反馈实例时,它全部完美地映射到数据库中,但是当我打开问题并循环遍历所有反馈时,不会显示任何添加的反馈。为了显示它们,我需要重新部署 Web 应用程序。

为什么会发生这种情况?

为了便于阅读,我只显示涉及的部分

QuestionFeedback实体

public class QuestionFeedback implements Serializable {

@ManyToOne
private Question question;
....

public void setQuestion(Question question) {
this.question = question;

if (!question.getFeedbacks().contains(this)) {
question.getFeedbacks().add(this);
}
}
....
}

问题实体

@Entity
public class Question implements Serializable {

@OneToMany(mappedBy = "question", fetch = FetchType.EAGER)
private List<QuestionFeedback> feedbacks;

public Question() {
feedbacks = new ArrayList<QuestionFeedback>();
}

public void addFeedback(QuestionFeedback questionFeedback) {

if (!getFeedbacks().contains(questionFeedback)) {
getFeedbacks().add(questionFeedback);
}

if (questionFeedback.getQuestion() != this) {
questionFeedback.setQuestion(this);
}
}
}

报告页面的支持 bean

问题实体已从数据库中检索。

public String flag() {
questionFeedback.setQuestion(question);
questionFeedbackService.persist(questionFeedback);

return "index";
}

DAO 类

public void persist(QuestionFeedback questionFeedback) {
entityManager.persist(questionFeedback);
}

最佳答案

这是一个脏 session 的简单实例。

虽然这些问题可能是由各种问题引起的,但通常需要记住两件简单的事情,这样可以很容易地追踪到这个错误。

首先,您必须始终记住,当我们在 JPA/hibernate 中保留数据时,我们不一定能保证事务已在数据库中完成。 “坚持”方法的真正含义是错误和问题的常见来源,请确保您完全理解它以及它与您的业务逻辑的关系。 :

What's the advantage of persist() vs save() in Hibernate?

其次,在确保事务已完成且数据已保存后,您可以使用 EntityManager.refresh 方法来更新数据库中任何对象的状态。

关于java - 双向一对多关系不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8861918/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com