也许这是个愚蠢的问题,但它困扰着我。
我有一个员工到车辆的双向一对多关系。当我第一次将员工持久化到数据库中(即它没有分配ID时),我也希望它相关联的车辆得到持久化。
目前这对我来说很好用,但是我的已保存的车辆实体没有自动映射到相关联的员工,并且在数据库中,Vehicle表中的employee_id外键列为空。
我的问题是,是否可以在同一时间内持久化车辆的员工和员工本身?我意识到需要先保存员工,然后再保存车辆。JPA能否自动为我完成此操作?还是我需要做类似以下的事情:
我有一个员工到车辆的双向一对多关系。当我第一次将员工持久化到数据库中(即它没有分配ID时),我也希望它相关联的车辆得到持久化。
目前这对我来说很好用,但是我的已保存的车辆实体没有自动映射到相关联的员工,并且在数据库中,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);
简单清晰得多。感谢大家的帮助!