Java JPA:双向m:n关系中的数据访问

Java JPA:双向m:n关系中的数据访问,java,jpa,entity,Java,Jpa,Entity,我想建模实体“订单”和“项目”之间的示例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"

我想建模实体“订单”和“项目”之间的示例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;
...
。。。
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
@列(name=“ORDER\u ID”)
私有长orderId;
@列(name=“订单描述”)
私有字符串描述;
@JoinTable(name=“订单项目”,
joinColumns=@JoinColumn(name=“ORDER\u ID”,referencedColumnName=“ORDER\u ID”),
inverseJoinColumns=@JoinColumn(name=“ITEM\u ID”,referencedColumnName=“ITEM\u ID”))
私人设置项目;
...
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;
...
。。。
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
@列(name=“ITEM\u ID”)
私有长项目ID;
@列(名称=“项目描述”)
私有字符串描述;
@列(名称=“项目价格”)
私人多头价格;
@许多(mappedBy=“items”)
私人定单;
...
你知道为什么我不能反向获得与特定项目相关的订单吗?部分@manytomy(mappedBy=“items”)为我提供了一个“此关系的无效映射类型”。我想我可以创建任意项目和订单,将项目添加到订单中,然后获得与项目相关的所有订单

在我的例子中,item.getOrders()给了我一个NullPointerException


非常感谢

只是因为您忘记在项目上添加多个注释:

@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;
@manytomy
@JoinTable(name=“订单项目”,
joinColumns=@JoinColumn(name=“ORDER\u ID”,referencedColumnName=“ORDER\u ID”),
inverseJoinColumns=@JoinColumn(name=“ITEM\u ID”,referencedColumnName=“ITEM\u ID”))
私人设置项目;

您是对的,它消除了“此关系的无效映射类型”,但没有消除NullPointerException NPE可能是由于某些内容未初始化。向我们展示相关的代码,异常的堆栈跟踪,并告诉我们它指的是哪一行代码(通过编辑您的问题)。就是这样。我还没有在构造函数中初始化哈希集。现在,它可以按预期工作了!:)顺便说一句:我删除了非拥有方“Item”上的@ManyToMany。这可以使用finde,但现在在墙后创建了两个连接表。你能解释一下吗?你为什么要删除这个项目中的许多内容?你不能移除它。只是暂时的检查行为。然而,我怀疑它是否有效。