当前位置: 首页 > 知识库问答 >
问题:

JPA:将子实体添加到父实体

墨财
2023-03-14

我可能需要一些帮助,因为我被这些文件弄糊涂了:

我有一个JPA母公司:

public class Provider implements Serializable {
...
    @OneToMany(fetch = FetchType.LAZY)
    private List<Contact> contacts;

和孩子:

public class Contact implements Serializable {
    ...
    @ManyToOne(fetch = FetchType.LAZY)
    private Provider provider;

如果我只是增加联系人,我希望JPA能够建立这种关系。

e、 g:

Contact c = new Contact();
c.provider = providerX;
repo.save(c);

现在发生的是:

  • 触点插入DB(良好)
  • 使用providerX。联系人中的id。提供者列(良好)
  • provider\u contact表中未显示任何关系条目

我知道我可以将联系人设置为提供者的属性<代码>providerX。联系人。添加(c)。。。回购。保存(providerX),但这有点不方便,感觉不对。

如何配置实体以仅在保存联系人时创建此关系?

谢谢你的帮助格雷果

共有1个答案

濮阳安澜
2023-03-14

首先,您需要在非所有者实体中添加mappedBy以建立双向关系,并初始化列表,以便只需要在需要时添加到列表中

 @OneToMany(fetch = FetchType.LAZY, mappedBy="provider")
private List<Contact> contacts = new ArrayList<>();//im supposing java 8

然后,由于您的关系是双向的,因此逻辑上需要将关系的每一侧映射到另一侧,因此您需要在另一侧中引用每一侧

Contact c = new Contact();
c.setProvider(providerX);
providerX.getContacts().add(c);//please use getters and setters  
repo.save(c);

最后,您需要将提供者级联到联系人中,这样当您持久化联系人时,提供者就会被持久化

 @ManyToOne(fetch = FetchType.LAZY,cascade=CascadeType.PERSIST)
private Provider provider;
 类似资料:
  • 实体框架5.0首先使用现有数据库编写代码。使用电动工具对类进行逆向工程。一切都很好。数据库有两个表。一个父母和一个孩子的外键返回到父母ID。ID都是带有自动增量的int。我添加了许多父母记录,现在想将孩子记录添加到特定的父母。我能看到的唯一方法是通过在父母表中搜索名称或其他属性并返回ID来找到适当的父母ID。然后在添加孩子时在外键属性中使用该ID。我不想设置新父母,所以这是将孩子添加到现有父母的唯

  • 我有一个相当大的系统,它的规范是由子实体上的几个方法构建的。所以我有一个用户,他有一个宠物木偶,就像这个问题一样。我的关系是双向的,所以Pet在用户上也有多对一的关系,我正在努力将子实体上的规范转换为应用于父实体。 我查找的大多数问题都显示了如何在不同的实体上应用规范,或者在规范执行后获得不同的实体。这不是我想要的。 我试着写一个这样的方法: 但我不知道如何编写它(我尝试过使用Join,但没能“告

  • 如何返回与JPA中的父级有关系的实体列表? 我有一个用户实体,在名为的属性上有@OneToMany映射。子实体为Pet类型。这只是一种单向关系。 如何在JPA中编写返回给定用户的所有宠物的连接?

  • 我一直试图将一个实体添加到数据库中,该实体与另一个实体有OneTo许多关系,但当我插入该实体时,它说无法插入id,因为它是null。 我已经映射了这样的父子类: 子实体: 我的json长这样: 这是hibernate抛出的错误: 错误Msg=ORA-01400:无法将NULL插入(“DQISAPPS”。“目录\备注”。“目录\ ID”) 在甲骨文。jdbc。驾驶员t4cttiore11。proce

  • 我有一个要求,我需要将搜索关键字应用于父实体(客户)的名称和状态,以及子实体 Order 的名称属性。 并在查询中包含子表,我正在执行以下操作 Hibernate正在生成下面的查询,但是我需要的是将order.name之类的比较添加到父块中。 我想要的是(lcase(order_.NAME)像?)在父块内。所以我想要的是以下内容 (this_名称)像? 或大小写(this_.状态) 像 ? 或大小

  • 我的实体。ValidationStep与documentDetail有一对一的关系,documentDetail与documentValidations有一个完全的关系 我的删除查询 父ValidationStep被删除,但是docDetail和documentValidations仍然在数据库中。