私のクラスはこれに似ています:(オファークラス)
@Entity
public class Offer {
@Id
@GeneratedValue(strategy = GenerationType.TABLE)
private int id;
@ElementCollection(fetch = FetchType.LAZY)
private Set<Product> products;
...other fields
}
および製品クラス:
@Embeddable
public class Product {
private String name;
private String description;
private int amount;
}
問題は、Offer エンティティを永続化し、Offer の Set に 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.
2 つの埋め込み可能オブジェクトの 1 つが「金額」フィールドの値が同じであるのに、セットに 2 つの埋め込み可能オブジェクトを永続化できない理由がわかりません。どうにかIDとして扱われるのでしょうか?
このように使用するように設計されていないため、埋め込み可能なオブジェクトのリストを作成しないでください。もしそうなら、製品のエンティティは必要ないが、別のエンティティ (オファー) にセットを保持したい場合はどうすればよいですか?
助けてくれてありがとう