当前位置: 首页 > 面试题库 >

Honenate OnetoMany,ManyToOne映射为null

钱星辰
2023-03-14
问题内容

我有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中自动更新/设置。你必须自己做。顺便说一句,在我的所有项目中,双向关系都是一个麻烦,我建议避免使用它们。



 类似资料:
  • 我发现了其他有相同错误的主题,但没有一个似乎涵盖了我的问题。 你能帮我弄清楚是什么问题吗? 多谢!

  • 所以我在网上搜索了我的问题的答案,但没有找到有帮助的东西,基本上是需要在两个类之间有一个ManyToOne关系,其中一个类有一个EmbeddedId,我要把代码留在这里,错误信息是它给(我使用野蝇来运行服务器)。 公共类InventoryPK实现可序列化{ } @实体@Table(name=“inventario”,schema=“mxnextmob”) 公共类库存扩展基本模型{ } 公共类公司扩

  • 问题内容: 尝试创建组合键(EmbeddedId)时,我遇到了Ebean的问题。 这是我所拥有的草案: 注意 :我正在将Ebean 4.1.4与Java 1.6一起使用。 因此,此代码运行良好,但存在一个我正在尝试解决的问题-数据库中的结果表如下所示: entityB_ID [主要] entityA_FK_ID [主要] 实体A_fk 如您所见,考虑到“ entityA_FK_ID”列,最后一列是

  • 我在Spring Boot JPA应用程序中有以下设置: 可嵌入 原因:org.hibernate.AnnotationException:mappedBy引用了未知的目标实体属性:com.foobar.entity.logSearchHistoryAttr.logSearchHistoryAttrs中的com.foobar.entity.logSearchHistoryAttr.logSearc

  • 我是一个初学者,学习JPA,为了练习,我在这个问题上工作,我有两个实体班Person和Gym。 Person有:-id(自动生成)-name-age-gym(多对一映射) 在我的服务课上,这就是我正在做的