Hibernate OnetoMany,ManyToOne Mapping Giving null

2022-09-03 14:39:25

我有2个类,称为PurcelList.java和PurselistItems.java

我必须在采购列表中映射采购列表项目

购买清单.java

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

采购清单项目.java

@ManyToOne
@JoinColumn(name="pl_id")
private PurchaseList purchaseListId;

一切都很好,但我在pl_id中得到了空。请告诉我哪里错了


答案 1

由于某种原因,映射的 对于我不起作用与postgres sql和Hibernate4

下面的映射工作

购买清单.java

@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name="pl_id",nullable=false)
private List<PurchaseListItems> purchaseListItems;

采购清单项目.java

@ManyToOne
@JoinColumn(name="pl_id", nullable=false,insertable=false,updatable=false )
private PurchaseList purchaseListId;

注意:您必须使用“标识”或“显式提及 postgres 的 id 序列”列。

@GeneratedValue(strategy=GenerationType.IDENTITY)

答案 2

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

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

mappedBy 属性是必需的,因为提供程序无法自动确定指定的关系是否实际形成单个关系。可以使用实例成员的 Java 类型,但是如果您有相同类型的多个成员,该怎么办?在很多情况下,您有两个单一的关系。例:

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

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

这是两个独立的关系,必须这样对待。如果你的持久性提供只是因为类型和多重性匹配而从中产生了双向关系,你会感到非常惊讶。

另请注意,双向关系不会由任何 JPA 提供程序自动管理,这意味着反向端不会在对象模型中自动更新/设置,因此不会在 db 中自动更新/设置。你必须自己做。顺便说一句,在我所有的项目中,双向关系都是一种痛苦,我认为避免它们是明智的。


推荐