我有2个名为PurchaseList.java和PurchaseListItems.java的类
我必须在PurchaseListItems中映射PurchaseList
PurchaseList.java
@OneToMany(cascade = CascadeType.ALL) @JoinColumn(name="pl_id",referencedColumnName="id") private List<PurchaseListItems> purchaseListItems;
PurchaseListItems.java
@ManyToOne @JoinColumn(name="pl_id") private PurchaseList purchaseListId;
一切都很好,但我在pl_id中为空。请告诉我我错了
您的映射实际上定义了两个独立的单向关系。您想要的是一个双向关系。下面的代码将建立双向关系
@OneToMany(cascade = CascadeType.ALL, mappedBy = "purchaseListId") @JoinColumn(name="pl_id",referencedColumnName="id") private List<PurchaseListItems> purchaseListItems;
由于提供者无法自动确定指定的关系实际上形成了单个关系,所以mappingBy属性是必需的。可以使用实例成员的Java类型,但是如果您有多个相同类型的成员,该怎么办。在许多情况下,您有两个单一关系。例:
OneToMany:用户-> ForumThread(用户创建的线程)
ManyToOne:ForumThread->用户(关闭线程的用户。显然不一定是启动线程的用户)
这是两个独立的关系,必须这样对待。如果您的持久性只是由于类型和多样性匹配而建立了双向关系,您会感到非常惊讶。
还要注意,任何JPA提供程序都不会自动管理双向关系,这意味着相反的一面不会在对象模型中自动更新/设置,因此不会在db中自动更新/设置。你必须自己做。顺便说一句,在我的所有项目中,双向关系都是一个麻烦,我建议避免使用它们。