gpt4 book ai didi

list - JPA OneToMany - 添加/删除对象后列表不会更新,但会保留在数据库中

转载 作者:行者123 更新时间:2023-12-02 20:06:23 25 4
gpt4 key购买 nike

我使用的是 JPA,而不是 Hibernate。我的人际关系存在以下问题。我有 1:N 关系( parent : child )。

在 JSP 站点上,显示父级和子级。如果我加载 JSP 站点(第一次)并保存父级和子级,则一切正常。 Parent 被保存,Child 也通过外键保存到数据库中。

之后,将显示第二个 JSP 站点以及父站点和子站点。

但是,如果我返回第一个站点并将第二个子项(添加子项)保存到现有父项中,则 childEntityList 仍然是旧的,我的意思是,新的子项不在其中列表,但插入数据库中。

为什么childEntityList是旧的并且不更新?

家长:

@Entity
@Table(schema = "test", name = "Parent")
@XmlRootElement
@NamedQueries({...})
public class Parent implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY, generator = "A_SEQ")
@Basic(optional = false)
@NotNull
@Column(name = "ID")
private int id;

@OneToMany(mappedBy = "p", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
private List<ChildEntity> childEntityList = new ArrayList<ChildEntity>();
// ...

public List<ChildEntity> getChildEntityList() {
return childEntityList;
}

public void setChildEntityList(List<ChildEntity> childEntityList) {
this.childEntityList = childEntityList;
}

public void addChildEntityToParent(ChildEntity c) {
this.childEntityList.add(c);
if(c.getParent() != this) {
c.setParent(this);
}
}

public void removeChildEntityFromParent(ChildEntity c) {
childEntityList.remove(c);
}
// ...
}

child :

@Entity
@Table( name = "Child" )
@NamedQueries({...})
public class ChildEntity implements Serializable {
@Id
@GeneratedValue( strategy = GenerationType.IDENTITY )
@Column( name = "CHILD_ID" )
private Long childId;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "PARENT_ID")
private Parent p;
// ...

public Parent getParent() {
return p;
}

public void setParent(Parent p) {
this.p= p;
if(!p.getChildEntityList().contains(this)) {
p.getChildEntityList().add(this);
}
}

保存代码:

Parent p = new Parent(...);
ChildEntity c = new ChildEntity(...);
p.addChildEntityToParent(c);
childEntityFacade.create(c);

查看代码:

// ...
public doSomething(Parent p) {
super(p);
}
// ...
List<ChildEntity> cList = p.getChildEntityList();
System.out.print("Size: " + c.size());
// ...

在 View 代码中,即使我添加一个子项,childEntityList 的大小每次都是相同的。只有当我重新启动服务器时,才会显示父级的所有子级。

父类中的childEntityList什么时候填满?是因为 @OneToMany 自动生成的吗?

谁能解释一下吗?

更新:每次从父列表中添加/删除子对象时,是否应该合并 EntityManager 或者执行其他操作?

最佳答案

您需要维持双向关系的双方。请参阅here .

关于list - JPA OneToMany - 添加/删除对象后列表不会更新,但会保留在数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14207731/

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