JPA - 持久化一对多关系

13 浏览
0 Comments

JPA - 持久化一对多关系

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

我有一个双向一对多的雇员到车辆的关系。当我第一次将雇员持久化到数据库中时(即它没有分配的ID),我也希望其关联的车辆被持久化。

目前这对我来说运行得很好,只是我的保存的车辆实体没有自动映射到关联的雇员,并且在数据库中,Vehicle表中的employee_id外键列是空的。

我的问题是,是否有可能在持久化Employee时同时持久化Vehicle的Employee?我意识到Employee需要先保存,然后Vehicle保存。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;

...

}

我刚刚意识到我应该在我的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);

更简单和清晰。感谢大家的帮助!

0