OneToMany使用Map:Order包含项目,每个项目都有数量

时间:2013-07-25 14:31:42

标签: hibernate jpa hashmap one-to-many

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

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

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

这是正确的方法吗?如果不是 - 这是最好的方法。显然,我有当前的代码:

@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在内的许多教程都提出了一个不同的用例,比如客户有一个Orders地图映射为orderId:Order等,这显然不是我的情况。

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

提前致谢, 穆斯塔法

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

您可以这样做:

@ElementCollection
@CollectionTable(name="item_qty",
    joinColumns=@JoinColumn(name="parententity_id"))
@MapKeyJoinColumn(name="item_id")
@Column(name="qty")
private Map<Item, Integer> item;