がスローされます(オファークラス)Hibernateは永続化の設定私のクラスはこれにsimiar見例外
@Entity
public class Offer {
@Id
@GeneratedValue(strategy = GenerationType.TABLE)
private int id;
@ElementCollection(fetch = FetchType.LAZY)
private Set<Product> products;
...other fields
}
とProductクラス:
@Embeddable
public class Product {
private String name;
private String description;
private int amount;
}
私が持続しようとすると問題がありますオファーエンティティとセットのを提供するために2つのオブジェクトを追加しよう:
Product product = new Product("ham", "description1", 1);
Product product = new Product("cheese", "description2", 1);
私は例外を受け取る:
Caused by: org.postgresql.util.PSQLException: ERROR: duplicate key value violates unique constraint "offer_products_pkey"
Details: Key (offer_id, amount)=(1, 1) already exists.
「amount」フィールドの値が同じでも、2つの埋め込みオブジェクトをセットに残すことはできません。それは何とかIDとして扱われますか?
埋め込み可能なオブジェクトのリストは、このように使用するように設計されていないため作成しないでください。もしそうなら、私は製品のエンティティは必要としませんが、別のエンティティ(オファー)にそのセットを保持したいのですが?問題Set
を使用して、ヘルプ
テーブル製品で誤ったキーを定義している可能性があります。例外はクリアです – mariusz2108
Productオブジェクトにキー変数はありません。 Setの代わりにListを使用すると、正常に動作しますが、Setに対しては機能しません。問題は、Setインターフェイスの機能に縛られているようです。重複を含むことはできません。しかし、なぜフィールド "金額"は重複として扱われますか? – azalut
このエラーはPostgreSQLが原因です。何が間違っているかを示します。(offer_id、amount)に対してoffer_products_pkeyという名前の主キーのように定義しました。同じ主キーを持つ2つの行を挿入しようとしています。そのプライマリキー制約が存在しない場合は削除します。 –