一尘不染

Honenate OnetoMany,ManyToOne映射为null

hibernate

我有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中为空。请告诉我我错了


阅读 339

收藏
2020-06-20

共1个答案

一尘不染

您的映射实际上定义了两个独立的单向关系。您想要的是一个双向关系。下面的代码将建立双向关系

@OneToMany(cascade = CascadeType.ALL, mappedBy = "purchaseListId")
@JoinColumn(name="pl_id",referencedColumnName="id")
private List<PurchaseListItems> purchaseListItems;

由于提供者无法自动确定指定的关系实际上形成了单个关系,所以mappingBy属性是必需的。可以使用实例成员的Java类型,但是如果您有多个相同类型的成员,该怎么办。在许多情况下,您有两个单一关系。例:

OneToMany:用户-> ForumThread(用户创建的线程)

ManyToOne:ForumThread->用户(关闭线程的用户。显然不一定是启动线程的用户)

这是两个独立的关系,必须这样对待。如果您的持久性只是由于类型和多样性匹配而建立了双向关系,您会感到非常惊讶。

还要注意,任何JPA提供程序都不会自动管理双向关系,这意味着相反的一面不会在对象模型中自动更新/设置,因此不会在db中自动更新/设置。你必须自己做。顺便说一句,在我的所有项目中,双向关系都是一个麻烦,我建议避免使用它们。

2020-06-20