JPA – сохранение отношения от одного до большого

Может быть, это глупый вопрос, но это меня раздражает.

У меня есть двунаправленное отношение ко многим сотрудникам к транспортным средствам. Когда я впервые сохраняю Работника в базе данных (т. Е. У него нет назначенного идентификатора), я также хочу, чтобы его связанные Транспортные средства сохранялись.

В настоящее время это отлично работает для меня, за исключением того, что мой сохраненный объект Vehicle не получает сопоставленного связанного сотрудника, и в базе данных столбец Foreign_ employee_id в таблице Vehicle равен null.

Мой вопрос: возможно ли, чтобы работник транспортного средства сохранялся в то же время, что и сам Сотрудник сохраняется? Я понимаю, что сначала необходимо сохранить Работника, а затем сохранить его. Может ли JPA сделать это автоматически для меня? Или мне нужно сделать что-то вроде следующего:

Vehicle vehicle1 = new Vehicle(); Set vehicles = new HashSet(); vehicles.add(vehicle1); Employee newEmployee = new Employee("matt"); newEmployee.setVehicles(vehicles); Employee savedEmployee = employeeDao.persistOrMerge(newEmployee); vehicle1.setAssociatedEmployee(savedEmployee); vehicleDao.persistOrMerge(vehicle1); 

Благодаря!

Изменить: по запросу, вот мои сопоставления (без всех других методов и т. Д.).

 @Entity public class Employee { @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name="employee_id") private Long id; @OneToMany(mappedBy="associatedEmployee", cascade=CascadeType.ALL) private Set vehicles; ... } @Entity public class Vehicle { @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name="vehicle_id") private Long id; @ManyToOne @JoinColumn(name="employee_id") private Employee associatedEmployee; ... } 

Я просто понял, что должен был иметь следующий метод, определенный в моем classе Employee:

 public void addVehicle(Vehicle vehicle) { vehicle.setAssociatedEmployee(this); vehicles.add(vehicle); } 

Теперь код выше будет выглядеть так:

 Vehicle vehicle1 = new Vehicle(); Employee newEmployee = new Employee("matt"); newEmployee.addVehicle(vehicle1); Employee savedEmployee = employeeDao.persistOrMerge(newEmployee); 

Гораздо проще и чище. Спасибо за вашу помощь всем!

Перед тем, как продолжить Работу, вы должны установить связанный с ним сотрудник на транспортном средстве.

 Employee newEmployee = new Employee("matt"); vehicle1.setAssociatedEmployee(newEmployee); vehicles.add(vehicle1); newEmployee.setVehicles(vehicles); Employee savedEmployee = employeeDao.persistOrMerge(newEmployee); 

Один из способов сделать это – установить параметр каскада на вас «One» сторону отношений:

 class Employee { // @OneToMany(cascade = {CascadeType.PERSIST}) private Set vehicles = new HashSet(); // } 

этим, когда вы звоните

 Employee savedEmployee = employeeDao.persistOrMerge(newEmployee); 

это также спасет транспортные средства.

  • Каковы преимущества использования ORM?
  • Получение соединения с базой данных в чистой настройке JPA
  • @Basic (необязательно = false) vs @Column (nullable = false) в JPA
  • Что используется session.flush () в Hibernate
  • Hibernate: MyInterceptor # onFlushDirty никогда не вызывается
  • Уникальные поля, допускающие нули в Django
  • Какова проблема с запросом SELECT N + 1?
  • Примитив или shell для первичных ключей спящего режима
  • .net ORM Сравнение
  • org.hibernate.MappingException: Не удалось определить тип для: java.util.List, at table: College, для столбцов:
  • Какой ORM я должен использовать для Node.js и MySQL?
  • Давайте будем гением компьютера.