0

我必须设计数据库,以便我有一个名为 Item 的表(待售)。当一个项目被创建时,它的一部分就是数量。所以我打算有一个表 item_qty 有 item_id 和数量(店主拥有的原始数量)。

现在客户会在网上看到这个项目并下订单。所需的设计是这样一个订单可以有很多项目,每个项目都有一个相关的数量(这是来自客户的数量,例如我想买 2 支笔)。

理想情况下,我希望 Order 类具有: Map<Item, Integer> items; 其中 Integer 字段用于数量。和一个对应的表 Order_items 具有 (order_id, item_id, requested_qty)。

这是正确的方法吗?如果没有 - 最好的方法是什么。显然,使用我拥有的当前代码:

@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@MapKeyJoinColumn(name="id")
public Map<Item, Integer> getItem() {
    return item;
}

我正进入(状态:

原因:org.hibernate.AnnotationException:使用@OneToMany 或@ManyToMany 瞄准未映射的类:com.test.shop.jpa.entity.Order.item[java.lang.Integer]

包括 Hibernate 在内的许多教程都建议使用不同的用例,例如 Customer 将 Orders 映射为 orderId:Order 等,这显然不是我的情况。

请提出最佳方法,我会尽力实施。

在此先感谢,穆斯塔法

4

2 回答 2

0

你可以这样做:

@ElementCollection
@CollectionTable(name="item_qty",
    joinColumns=@JoinColumn(name="parententity_id"))
@MapKeyJoinColumn(name="item_id")
@Column(name="qty")
private Map<Item, Integer> item;
于 2013-12-30T21:35:02.033 回答
0

我不认为这是可能的。映射的结构也必须是实体。可以定义一个仅包含整数的实体以提供值。

但也许你看看@ElementCollection。顺便提一句。为什么不简单地将这个值添加到 Item 中?

于 2013-07-26T15:57:24.257 回答