おそらくこれは愚かな質問ですが、気になっています。
従業員と車両の間に双方向の 1 対多の関係があります。従業員を初めてデータベースに永続化する場合 (つまり、ID が割り当てられていない場合)、それに関連付けられた車両も永続化する必要があります。
現時点では、これは問題なく動作しますが、保存した Vehicle エンティティに関連付けられた Employee が自動的にマップされず、データベース内の Vehicle テーブルの employee_id 外部キー列が null になります。
私の質問は、従業員自体が永続化されると同時に車両の従業員も永続化できるかどうかです。従業員を最初に保存し、その後で車両を保存する必要があることはわかっています。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);
はるかにシンプルでクリーンになりました。皆様のご協力に感謝します!
ベストアンサー1
従業員を永続化する前に、Vehicle に関連付けた従業員を設定する必要があります。
Employee newEmployee = new Employee("matt");
vehicle1.setAssociatedEmployee(newEmployee);
vehicles.add(vehicle1);
newEmployee.setVehicles(vehicles);
Employee savedEmployee = employeeDao.persistOrMerge(newEmployee);