我正在尝试映射实体,因此我会有以下或类似的效果(最好没有OrderItem.quantity):
这是我的实体:
public class Orders implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@ManyToOne
private UserCreds user;
@OneToMany
private List<Item> orderedItems;
我最终只使用2列映射OrdersItem连接表: item_id 和 order_id ,都是密钥 因此它不会让我坚持重复项目的顺序。为OrderItems添加id列应该可以解决这个问题:
OrdersItem table that I except:
| ID | ORDER_ID | ITEM_ID
1 25 31
2 25 31
3 25 12
4 25 12
5 25 62
等。 但是我无法让它工作,或者我的解决方案完全错了?
答案 0 :(得分:0)
在这里使用元素集合可能是更好的选择。元素集合可以很好地提供与属性的关系。
您的Orders
课程中可能会显示如下:
@ElementCollection
private Map<Item, Integer> itemQuantities = new HashMap<Item, Integer>();
编辑:当@ElementCollection
的值类型为基本类型或Map
时,您可以使用Embeddable
。 Integer
是基本类型。
如果您决定使用实体作为Map
的值类型,则必须使用@OneToMany
或@ManyToMany
在这种情况下,键类型对注释选择没有影响,因此您可以使用Item
或Long
作为键,而无需更改注释。但是,这会对您可以使用的物理映射注释产生影响。