Meine Klassen simiar aussehen: (Angebot Klasse)Hibernate persistierenden Set @Embeddable Objekte wirft Ausnahme
@Entity
public class Offer {
@Id
@GeneratedValue(strategy = GenerationType.TABLE)
private int id;
@ElementCollection(fetch = FetchType.LAZY)
private Set<Product> products;
...other fields
}
und Produktklasse:
@Embeddable
public class Product {
private String name;
private String description;
private int amount;
}
Das Problem ist, wenn ich versuche, die bestehen bleiben Verschenken Einheit und versuchen, zwei Objekte hinzufügen bieten das Set:
Product product = new Product("ham", "description1", 1);
Product product = new Product("cheese", "description2", 1);
I Ausnahme erhalten:
Ich habe keine Ahnung, warum kann ich nicht zwei eingebettete Objekte im Set beibehalten, wenn einer von ihnen den gleichen Wert von "Menge" Feld hat? Wird es irgendwie als ID behandelt?
Vielleicht sollte ich keine Liste einbettbarer Objekte erstellen, da sie nicht dafür gedacht ist, so verwendet zu werden? Wenn ja - was dann, wenn ich keine Entität des Produkts benötige, sie aber in einer anderen Entität (Angebot) behalten möchte?
Vielen Dank im Voraus für die Hilfe
Sie haben wahrscheinlich falsch definierten Schlüssel in der Tabelle Produkte. Ausnahme ist klar – mariusz2108
Ich habe keine Schlüsselvariable in Produktobjekt. Wenn ich List statt Set verwende, funktioniert es gut, aber für Set tut es nicht. Das Problem scheint mit den Features der Set-Schnittstelle verbunden zu sein - es darf keine Duplikate enthalten. Aber warum wird Feld "Betrag" als doppelt behandelt? – azalut
Der Fehler kommt von PostgreSQL. Es sagt Ihnen, was falsch ist: Sie haben definiert, was wie ein Primärschlüssel namens offer_products_pkey für (offer_id, amount) aussieht. Und Sie versuchen, zwei Zeilen mit demselben Primärschlüssel einzufügen. Diese Primärschlüsseleinschränkung löschen, wenn sie nicht existieren sollte. –