Ich habe eine Klasse namens SynonymMapping, die als CollectionOfElements kartiert eine Sammlung von Werten hatHibernate CollectionOfElements EAGER holen Elemente Duplikate
@Entity(name = "synonymmapping")
public class SynonymMapping {
@Id private String keyId;
//@CollectionOfElements(fetch = FetchType.EAGER)
@CollectionOfElements
@JoinTable(name="synonymmappingvalues", joinColumns={@JoinColumn(name="keyId")})
@Column(name="value", nullable=false)
@Sort(type=SortType.NATURAL)
private SortedSet<String> values;
public SynonymMapping() {
values = new TreeSet<String>();
}
public SynonymMapping(String key, SortedSet<String> values) {
this();
this.keyId = key;
this.values = values;
}
public String getKeyId() {
return keyId;
}
public Set<String> getValues() {
return values;
}
}
Ich habe einen Test, wo ich speichern zwei SynonymMapping Objekte in die Datenbank und dann fragen die Datenbank um alle gespeicherten SynonymMapping-Objekte zurückzugeben, in der Erwartung, die zwei Objekte zu erhalten, die ich gespeichert habe.
Wenn ich die Zuordnung von Werten zu eifrig ändern (wie im Code durch die auskommentierte Zeile gezeigt) und den Test erneut ausführen, erhalte ich vier Übereinstimmungen.
Ich habe die Datenbank zwischen Läufen gelöscht, und ich kann dieses Problem zwischen eifrig und faul switching.
Ich denke, es hat mit den Joins zu tun, die Winterschlaf schafft darunter, aber ich kann keine definitive Antwort online finden.
Kann mir jemand sagen, warum ein eifriger Abruf die Objekte dupliziert?
Danke.
Jeder mit der Ausnahme „Mehr als eine Zeile mit der angegebenen ID gefunden wurde“ soll darüber Bescheid wissen. Es spart wirklich viele Stunden nicht zu wissen, was zum Teufel schief geht. Siehe @ user176668 Antwort !! –