我想为实体“ order”和“ items”之间的示例m:n关系建模
对应的映射部分是:
Order.java:
...
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="ORDER_ID")
private Long orderId;
@Column(name="ORDER_DESCRIPTION")
private String description;
@JoinTable(name ="ORDER_ITEMS",
joinColumns=@JoinColumn(name="ORDER_ID", referencedColumnName="ORDER_ID"),
inverseJoinColumns=@JoinColumn(name="ITEM_ID", referencedColumnName="ITEM_ID"))
private Set<Item> items;
...
Item.java:
...
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ITEM_ID")
private Long itemId;
@Column(name = "ITEM_DESCRIPTION")
private String description;
@Column(name = "ITEM_PRICE")
private Long price;
@ManyToMany(mappedBy="items")
private Set<Order> orders;
...
您知道为什么我无法逆向引用特定项目的订单吗? @ManyToMany(mappedBy =“ items”)部分为我提供了“此关系的无效映射类型”。我以为我可以创建任意项目和订单,将这些项目添加到订单中,然后再获取与该项目有关的所有订单。
就我而言,item.getOrders()给我一个NullPointerException。
非常感谢!
最佳答案
仅仅是因为您忘记在项目上添加ManyToMany批注:
@ManyToMany
@JoinTable(name ="ORDER_ITEMS",
joinColumns=@JoinColumn(name="ORDER_ID", referencedColumnName="ORDER_ID"),
inverseJoinColumns=@JoinColumn(name="ITEM_ID", referencedColumnName="ITEM_ID"))
private Set<Item> items;