我有一个由SpringData-Hibernate管理的双向OneToMany关系。
这是一面:
@OneToMany(mappedBy = "konto", fetch = FetchType.EAGER, cascade = { CascadeType.MERGE })
protected Set<Karte> karten = new HashSet<>();
这是很多方面:
@ManyToOne
private Konto konto;
现在在我的一项集成测试中,保存konten时出现此错误:
Multiple representations of the same entity [Karte#1] are being merged. Detached:[Karte{id=1, ... ]
我知道已经讨论了很多次了,但是没有建议的解决方案对我有用。
我知道,当equals和hashcode方法未正确实现时,会发生这种情况。这是Karte的方法:
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
if (this.nummer != null) {
result = prime * result + this.nummer.hashCode();
} else {
result = prime * result + ((this.id == null) ? 0 : this.id.hashCode());
}
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (this.getClass() != obj.getClass()) {
return false;
}
Karte other = (Karte) obj;
if (this.getNummer() != null && other.getNummer() != null) {
if (!this.getNummer().equals(other.getNummer())) {
return false;
}
} else if (this.getId() == null) {
return false;
} else if (!this.getId().equals(other.getId())) {
return false;
}
return true;
}
这是Konto的方法:
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((this.kontofuehrend == null) ? 0 : this.kontofuehrend.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (this.getClass() != obj.getClass()) {
return false;
}
Konto other = (Konto) obj;
if (this.kontofuehrend == null) {
if (other.kontofuehrend != null) {
return false;
}
} else if (!this.kontofuehrend.equals(other.kontofuehrend)) {
return false;
}
return true;
}