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); 

更简单,更清洁。 谢谢大家的帮助!

在持续员工之前,必须在车辆上设置关联的员工。

 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); 

它也将节省车辆。