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);
它也将节省车辆。