gpt4 book ai didi

java - OneToMany 关系仅返回一个元素

转载 作者:行者123 更新时间:2023-12-01 12:10:21 25 4
gpt4 key购买 nike

我遇到了一种非常奇怪的行为,我在两个实体(A,B)之间有一对多的关系。当我添加一个元素(B)时,一切都OK。但一旦我添加第二个(B1)。寄存器是在数据库上创建的,我可以看到两个实体指向同一实体(A)。 “但是”一旦我检索到 A,我就可以看到列表中只有第一个 A,并且除 id 之外的所有属性均为 null。我的人际关系是这样的:

@OneToMany(cascade = {CascadeType.ALL}, orphanRemoval = true)
@JoinColumn(name = "a_id")
@XmlElement
@Getter
@Setter
private List<B> Bs = new ArrayList<>();




@ManyToOne
@JoinColumn(name = "a_id")
@Getter @Setter
private A a;

这里出了什么问题?

解决方案:是我的错,我的 B1 上的一个枚举值不正常,Hibernate 并没有提示它。在尝试直接从数据库获取值而不使用 A 后,我收到了异常。

问候。

最佳答案

您在 A > B 上的映射不正确:

public class A{

@OneToMany(mappedBy="a", cascade = {CascadeType.ALL}, orphanRemoval = true)
private List<B> Bs;
}


public class B{

@ManyToOne
@JoinColumn(name = "a_id")
private A a;
}

正如另一个答案中所建议的,如果您将 B 添加到 A 并保留 A,则设置关系的双方。您应该封装添加/删除操作以强制模型的完整性。

public class A{

@OneToMany(mappedBy="a", cascade = {CascadeType.ALL}, orphanRemoval = true)
private List<B> Bs;

public List<B> getBs(){
return Collections.unmodificableList(Bs);
}

public void addB(B b){
b.setA(this);
Bs.add(b);
}
}

关于java - OneToMany 关系仅返回一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27315227/

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