【问题标题】:How to save one parent entity and multiple child entities in single transaction using spring/hibernate如何使用spring/hibernate在单个事务中保存一个父实体和多个子实体
【发布时间】:2018-07-25 06:01:20
【问题描述】:

我正在做一个项目,我有一个父实体和多个子实体 例如:`

父实体 -> 员工和子实体 -> EmployeeAddress, EmployeeContact 等

我的问题是在单一保存方法中保存这样的关系的行业标准是什么。因为我希望 employee-id 出现在所有子实体中。 hibernate 是否为这些场景提供任何解决方案,或者我们是否必须在创建父实体后手动设置外键然后保存子实体。

谢谢。

【问题讨论】:

  • 如果你的关系是双向的,设置同步关系的双方并保存拥有方(你的Employee?)。您必须将cascade 选项设置为级联父级的持久操作。
  • 能否举个例子,这样会更清楚。
  • This post 可以帮到你。
  • 不仅仅是休眠。所有 JPA 提供程序都允许通过 *toOne 和 *ToMany 关系建立父子关系。您可以在网上搜索所有内容。当您遇到示例代码的代码问题时,请使用此论坛。

标签: hibernate spring-boot spring-data-jpa


【解决方案1】:

HibernateOneToMany 注释,用于保存和选择父类。让我们创建如下关系:

@Entity
public class Employee{

  @Id
  private int id;

  private String fullName;

  private double salary;

  @OneToMany(cascade = CascadeType.ALL)
  @JoinColumn(name = "employee_id")
  private List<Contact> contacts;
}

@Entity
public class Contact{

   @Id
   private int id;

   private String phoneNumber;

   private String address;

}

保存方法:

public void save(){
  Employee employee = new Employee();
  employee.setFullName("John Smith");
  employee.setSalaru(5000);

  Contact contact1 = new Contact("+19874561232","Wall Street 10"); 
  Contact contact2 = new Contact("+11234561232","Green Street 10");
  List<Contact> contacts = new ArrayList();
  contacts.add(contact1);
  contacts.add(contact2);
  employee.setContacts(contacts);

  session.save(employee);
}

You can learn more about OneToMany.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-15
    • 1970-01-01
    • 1970-01-01
    • 2016-09-17
    • 2020-12-10
    • 1970-01-01
    • 1970-01-01
    • 2011-03-29
    相关资源
    最近更新 更多