我必须设计数据库,以便我有一个名为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等,这显然不是我的情况。
请提出最佳方法,我会尽力实施。
提前致谢, 穆斯塔法
答案 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;