[英]JPA - Persisting a Unidirectional One to Many relationship fails with EclipseLink
[英]JPA - Persisting a One to Many relationship
也許這是一個愚蠢的問題,但它困擾着我。
我有員工與車輛的雙向一對多關系。 當我第一次將 Employee 持久化到數據庫中時(即它沒有分配的 ID),我也希望其關聯的 Vehicles 被持久化。
目前這對我來說很好用,除了我保存的 Vehicle 實體沒有自動獲取關聯的 Employee 映射,並且在數據庫中,Vehicle 表中的 employee_id 外鍵列為空。
我的問題是,是否有可能在堅持員工本身的同時堅持車輛的員工? 我意識到需要先保存 Employee ,然后再保存 Vehicle 。 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);
更簡單,更干凈。 感謝大家的幫助!
在持久化員工之前,您必須在車輛上設置相關員工。
Employee newEmployee = new Employee("matt");
vehicle1.setAssociatedEmployee(newEmployee);
vehicles.add(vehicle1);
newEmployee.setVehicles(vehicles);
Employee savedEmployee = employeeDao.persistOrMerge(newEmployee);
一種方法是在關系的“一方”上設置級聯選項:
class Employee {
//
@OneToMany(cascade = {CascadeType.PERSIST})
private Set<Vehicles> vehicles = new HashSet<Vehicles>();
//
}
通過這個,當你打電話
Employee savedEmployee = employeeDao.persistOrMerge(newEmployee);
它也將節省車輛。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.