题
也许这是一个愚蠢的问题,但它的烦我。
我有一个双向一个雇员的给车辆一对多的关系。当我坚持一个雇员在数据库中的第一次(即,它没有分配的ID)我也希望其相关联的车辆被保留。
这工作正常,我的那一刻,但我保存的车辆实体没有得到相关联的员工自动映射,并在数据库中的车辆表中的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);
更简单和更清洁。感谢您的帮助大家!
解决方案
您有持续雇员之前设置在车辆上的associatedEmployee。
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);
这将节省车辆太
不隶属于 StackOverflow