テーブル構造:ここでマップのJPA(Hibernate)マッピング。 java.util.Mapマッピングに使用する注釈は何ですか?
TABLE products (id (PK), name, price);
TABLE orders (id (PK), customer_id, user_id);
//product_quantity is quantity of product in particular order
TABLE products_to_orders (product_id, order_id, product_quantity
PRIMARY KEY (product_id, order_id),
FOREIGN KEY (product_id) REFERENCES products (id) ON DELETE CASCADE,
FOREIGN KEY (order_id) REFERENCES orders (id) ON DELETE CASCADE
);
私Order.java
です:
@Entity
@Table(name = "orders")
public class Order extends BaseEntity {
...
//this map holds Products and their quantities in order;
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(
name = "products_to_orders"
,joinColumns = @JoinColumn(name = "order_id")
,inverseJoinColumns = @JoinColumn(name = "product_id") //it seems that i don't need this line
)
@MapKeyJoinColumn(name = "product_id")
@Column(name = "product_quantity")
private Map<Product, Integer> productQuantityMap;
...
これらのアノテーションを使用して私のマッピングは動作しません。これは、例外を与える:org.hibernate.AnnotationException:@OneToManyを使用するか、マップされていないクラスのターゲット @ManyToMany: com.malikov.shopsystem.model.Order.productQuantityMap [java.langのをによって引き起こさ
。整数]
このマップに正しく注釈を付ける方法は管理できません。私はあなたの助けにたくさん感謝します! こちらはGitHubの私の返信サイトへのリンクです。 https://github.com/malikov-yurii/online-shop-management-system.git
UPDATE (ニールとマチェイから)2つの右のソリューションがあります。
Variation 1:
@ElementCollection(fetch = FetchType.EAGER)
@JoinTable(
name = "products_to_orders"
,joinColumns = @JoinColumn(name = "order_id")
)
@MapKeyJoinColumn(name = "product_id")
@Column(name = "product_quantity")
private Map<Product, Integer> productQuantityMap;
Variation 2
@ElementCollection(fetch = FetchType.EAGER)
@CollectionTable(name = "products_to_orders")
@MapKeyJoinColumn(name = "product_id")
@Column(name = "product_quantity")
private Map<Product, Integer> productQuantityMap;
ありがとうございました!それはうまくいくようです! –