当前位置: 首页 > 知识库问答 >
问题:

OneToMany使用地图:订单有项目,每个项目有数量

饶志
2023-03-14

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

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

我理想地想让订单类具有:Map

这条路对吗?如果没有,最好的方法是什么。显然,根据我目前的代码:

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

我得到:

由以下原因引起:org.hibernate.注释异常:使用@OneTo多或@ManyTo多针对未映射的类:com.test.shop.jpa.entity.Order.item[java.lang.整数]

包括Hibernate在内的许多教程都建议了一个不同的用例,例如客户将订单映射为orderId: order等,这显然不是我的情况。

请提出最佳方法,我将尽最大努力实施。

提前谢谢Mustafa


共有2个答案

姬银龙
2023-03-14

您可以这样做:

@ElementCollection
@CollectionTable(name="item_qty",
    joinColumns=@JoinColumn(name="parententity_id"))
@MapKeyJoinColumn(name="item_id")
@Column(name="qty")
private Map<Item, Integer> item;
梁丘柏
2023-03-14

我认为那是不可能的。映射的结构也必须是实体。可以定义一个只保存整数的实体来提供值。

但也许你可以看看@ElementCollection。顺便说一句,为什么不简单地将此值添加到项目中?

 类似资料:
  • 问题内容: 我有2张表: 命令: 和Order_details: 我需要做的是选择所有具有多个Order_detail的订单,并且订单状态必须为“ OK”,并且每个order_detail的状态都 必须 为(S1,S2) 我做了这样的事情: 但这将返回所有具有多个Order_details满足条件的订单。 我确定这部分很好: 但是我必须检查以上订单的每个Order_detail是否都具有状态IN(

  • 我需要在没有任何其他线程拦截的情况下同时锁定一些地图项目。我的意思是我想锁定10个项目,我想我需要使用循环,但我不想在锁定第5个项目后被阻止锁定其余5个项目。我是否需要使用另一个映射独立锁来包装锁定代码块?

  • PROJECT_B中的docker-compose.yml如下所示: 每个项目都可以单独运行,工作良好。但是,如果我们想要更改PROJECT_A和PROJECT_B之间的api,我们需要运行这两个项目,并将它们链接在一起以测试我们的代码。现在我们想写一个开发工具包项目,可以运行这两个项目,并链接他们,如果需要。最好的方法是什么?

  • 我需要一些关于我的GridLayoutManager的帮助。 如果我有一个项目,它应该在中间正常显示。 对于两个项目,它们应该彼此相邻。从三到四个项目的示例,它应该像正方形一样显示。3个项目的示例4个项目的示例 如果我是对的,spanCount 2应该就是这种情况。但是,如果有5个项目(所以连续3个),那就有问题了 从5个项目(及以上)开始,每个项目应该是连续3个,例如有5个项目,如果底部行的项目

  • 问题内容: 我正在尝试从Eclipse导出WAR文件。我有一个“动态Web项目”。但是我需要为另外两个项目创建一个类,一个是普通的Java项目,另一个是Web项目。因此,在Build Config中,我告诉它添加其他项目,然后在“ Order and Export”页面上单击框以导出第二个和第三个项目。在Eclipse中运行良好,显然可以毫无问题地找到其他项目中的文件。但是,当我导出时,WAR文件

  • 这是一个相当普遍的问题,我用过的解决方案和我后来搜索发现的差不多。其中一个实现了带有< code>JLabel的< code>ListCellRenderer,它根据当前选择的索引启用或禁用自身: 问题是,尽管列表项在视觉上显示为禁用,但尽管调用了< code>setFocusable,它仍然可以被选中。我该如何禁用它?