Vielleicht ist das eine blöde Frage, aber sie nervt mich.JPA - Eine One to Many-Beziehung beibehalten
Ich habe eine bidirektionale Eins-zu-viele-Beziehung von Mitarbeiter zu Fahrzeugen. Wenn ich einen Mitarbeiter zum ersten Mal in der Datenbank persistiere (d. H. Er hat keine zugewiesene ID), möchte ich auch, dass die zugehörigen Fahrzeuge beibehalten werden.
Dies funktioniert im Moment gut für mich, außer dass meine gespeicherte Vehicle-Entität den verknüpften Employee nicht automatisch zuordnen kann und in der Datenbank die Spalte für die Fremdschlüssel der employee_id in der Vehikel-Tabelle null ist.
Meine Frage ist, ist es möglich, den Mitarbeiter des Fahrzeugs zur gleichen Zeit persistent zu halten, die der Angestellte selbst persistiert wird? Mir ist klar, dass der Mitarbeiter zuerst gespeichert werden muss und dann das Fahrzeug gespeichert werden muss. Kann JPA dies automatisch für mich tun? Oder muss ich etwas wie das Folgende tun:
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);
Vielen Dank!
Edit: Wie gewünscht, hier ist meine Abbildungen (ohne alle anderen Methoden usw.)
@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;
...
}
ich die folgende Methode definiert in meiner Klasse Employee hatte gerade realisiert Ich hätte:
public void addVehicle(Vehicle vehicle) {
vehicle.setAssociatedEmployee(this);
vehicles.add(vehicle);
}
nun über den Code wird wie folgt aussehen:
Vehicle vehicle1 = new Vehicle();
Employee newEmployee = new Employee("matt");
newEmployee.addVehicle(vehicle1);
Employee savedEmployee = employeeDao.persistOrMerge(newEmployee);
Viele einfacher und sauberer. Danke für Ihre Hilfe!
Ooh, ok. Das funktioniert. Aber ich dachte, es könnte einen Weg geben, auf dem ich den zugehörigen Mitarbeiter nicht explizit auf das Fahrzeug setzen muss? – JMM
Ich glaube nicht, dass das mit JPA möglich ist. Ich habe auch Hibernate benutzt und da, wenn ich mich richtig erinnere, ist das möglich. – Bobby
Danke, dass du das Problem in meinem ursprünglichen Code aufgezeigt hast, ich habe es aktualisiert, wie ich es lösen werde. – JMM