Возможно, это глупый вопрос, но это меня подслушивает.
У меня двунаправленное отношение многих сотрудников к транспортным средствам. Когда я впервые сохраняю Работника в базе данных (т.е. У него нет назначенного идентификатора), я также хочу, чтобы его связанные Транспортные средства сохранялись.
В настоящее время это отлично работает для меня, за исключением того, что мой сохраненный объект Vehicle не получает связанный с ним Employee, а в базе данных столбец Foreign_ employee_id в таблице Vehicle равен null.
Мой вопрос: возможно ли, чтобы работник транспортного средства сохранялся в то же время, что сам Сотрудник сохраняется? Я понимаю, что сначала необходимо сохранить Работника, а затем сохранить его. Может ли JPA сделать это автоматически для меня? Или мне нужно сделать что-то вроде следующего:
Vehicle vehicle1 = new Vehicle();
Set<Vehicle> vehicles = new HashSet<Vehicle>();
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<Vehicle> 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;
...
}
Я просто понял, что должен был иметь следующий метод, определенный в моем классе 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);
Гораздо проще и чище. Спасибо за вашу помощь всем!