也許這是一個愚蠢的問題,但它卻在擾亂我。JPA - 堅持一對多的關係
我有一個雙向一對多員工對車輛的關係。當我第一次將員工留在數據庫中時(即,它沒有分配的ID),我也希望它的關聯車輛被持久化。
這對我來說很好,除了我保存的Vehicle實體沒有自動獲取關聯的Employee,並且在數據庫中的Vehicle表中的employee_id外鍵列爲空。
我的問題是,是否有可能讓車輛員工在員工本身持續存在的同時持續存在?我意識到員工需要先保存,然後再保存車輛。 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);
更簡單,更清潔。謝謝大家的幫助!要做到這一點
哦,好的。這樣可行。但我認爲可能有一種方法,我不必明確設置車輛上的相關員工? – JMM 2009-11-25 12:10:02
我不認爲這是可能的與JPA。我也使用了Hibernate,如果我沒有記錯的話,那是可能的。 – Bobby 2009-11-25 12:16:33
感謝您在我的原始代碼中指出問題,我已經用我將如何解決問題進行了更新。 – JMM 2009-11-25 12:33:04