gpt4 book ai didi

java - JPA - 保持一对多关系

转载 作者:IT老高 更新时间:2023-10-28 20:29:17 30 4
gpt4 key购买 nike

也许这是一个愚蠢的问题,但它困扰着我。

我有员工与车辆的双向一对多关系。当我第一次在数据库中持久化一个员工(即它没有分配的 ID)时,我还希望保留其关联的车辆。

目前这对我来说很好,除了我保存的 Vehicle 实体没有自动映射关联的 Employee,并且在数据库中 Vehicle 表中的 employee_id 外键列为空。

我的问题是,是否可以在保留员工本身的同时保留 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 之前,您必须在 Vehicle 上设置 associatedEmployee。

Employee newEmployee = new Employee("matt");
vehicle1.setAssociatedEmployee(newEmployee);
vehicles.add(vehicle1);

newEmployee.setVehicles(vehicles);

Employee savedEmployee = employeeDao.persistOrMerge(newEmployee);

关于java - JPA - 保持一对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1795649/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com